微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 R 中从长到宽重塑列表

如何解决在 R 中从长到宽重塑列表

我有一个长格式的列表如下:

name days N
A     1   80
A     2   90
B     1   70
B     3   85
B     5   100
C     2   80
C     5   95

我想获得以下输出

days   1  2  3  4  5
A      80 90 NA NA NA
B      70 NA 85 NA 100
C      NA 80 NA NA 95

我尝试了函数 reshape 并得到了错误

reshape(data,idvar = data[,1],timevar = [,3],direction = "wide")
Error in `[.data.frame`(data,timevar) : undefined columns selected

`

解决方法

这是一个使用 reshape

的基本 R 选项
reshape(
  df,direction = "wide",idvar = "name",timevar = "days"
)

给出

  name N.1 N.2 N.3 N.5
1    A  80  90  NA  NA
3    B  70  NA  85 100
6    C  NA  80  NA  95
,
library(tidyr)

df %>% 
  pivot_wider(id_cols = name,names_from = days,values_from = N)

要更改第一列的名称,您可以在运行上述代码后执行 names(df)[1] <- "days"

输出

  name    `1`   `2`   `3`   `5`
  <chr> <int> <int> <int> <int>
1 A        80    90    NA    NA
2 B        70    NA    85   100
3 C        NA    80    NA    95

注意:输出是一个 tibble 对象,它允许列名是数字,但在访问它们时,您需要使用反引号。通常,列名作为数字是不可取的,这就是为什么在基数 R data.frame 中会修复以数字开头的列名。 @ThomasIsCoding 发布的解决方案输出一个 data.frame 对象,这就是列有一个“N”的原因。前缀。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。