首页 > 解决方案 > 将行更改为列和分组依据

问题描述

我有一个相对较大的 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)

但在这里我也得到了同样的错误。我怎样才能做到这一点?

标签: rdataframespread

解决方案


看来您正在寻找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")

推荐阅读