r - 将行更改为列和分组依据
问题描述
我有一个相对较大的 DF,现在需要一种将列从行中取出的方法。
我的 DF 看起来像这样:
AID FNAME FVALUE
1 A 10
1 B 12
1 C 16
2 A 10
2 E 4
3 F 10
3 G 13
等等。并非所有行都具有所有特征。所以我喜欢这样的最终输出:
AID A B C D E F G H
1 10 12 16 NULL NULL NULL NULL
2 10 NULL NULL NULL 4 NULL NULL NULL
3 NULL NULL NULL NULL NULL 10 13 NULL
我已经尝试过传播:
wide_DF <- unite_DF %>% spread(FNAME, FVALUE)
但我得到了错误:
错误:每行输出必须由唯一的键组合标识。
我还尝试将数据分组并插入一个新的唯一列:
unite_DF %>% group_by(AID) %>% mutate(ind = row_number()) %>% spread(FNAME, FVALUE) %>% select(Name, Value)
但在这里我也得到了同样的错误。我怎样才能做到这一点?
解决方案
看来您正在寻找reshape
:
AID <- c(1, 1, 1, 2, 2, 3, 3)
FNAME <- c("A", "B", "C", "A", "E", "F", "G")
FVALUE <- c(10, 12, 16, 10, 4, 10, 13)
df <- data.frame(AID, FNAME, FVALUE)
df_wide <- reshape(df, direction = "wide", idvar = "AID", v.names = "FVALUE", timevar = "FNAME")
推荐阅读
- android - 如何在tablayout上解析json
- c++ - 枚举类计算常量
- string - 如何为str,Python3的两个列表制作置换矩阵
- amazon-web-services - 账户之间的 AWS PrivateLink
- twitter - 如何区分现在不存在但之前退出的用户?
- sql-server - 如何加入 sys.databases、sys.tables 和 sys.columns
- jquery - 从数据值接收值
- c++ - OpenGL大3D纹理(> 2GB)非常慢
- android - 在运行时切换移动应用程序中的 API 端点
- sql - 使用方解石修改 Sql Query 中的选择标识符