如何解决在 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(data,idvar = data[,1],timevar = [,3],direction = "wide")
Error in `[.data.frame`(data,timevar) : undefined columns selected
`
解决方法
这是一个使用 reshape
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 举报,一经查实,本站将立刻删除。