我想取一个数据帧并折叠列上的行,然后简单地创建另一列,该列是所有值的向量。
例如,我想像这样转换数据帧:
id item
1 100
1 103
1 109
1 101
2 102
2 109
2 107
2 105
3 105
3 106
3 101
3 102
3 110
到:
id item
1 (100,103,109,101)
2 (102,109,107,105)
3 (105,106,101,102,110)
所以第一列是唯一的id,第二列是该id看到的所有项目的向量/列表。看起来这应该很容易,但我还没有找到解决方案。如示例所示,每个id的项目数量可能会有所不同。
这是创建我试图转换的初始数据帧的代码。
id <- c(1,1,1,1,2,2,2,2,3,3,3,3,3)
item <- c(100,103,109,101,102,109,107,105,105,106,101,102,110)
input_frame <- data.frame(cbind(id,item))
您可以使用聚合
函数按id分组,然后使用c
函数从item中收集相应的元素:
aggregate(formula = item ~ id, data = input_frame, FUN = c)
输出:
id item
1 1 100, 103, 109, 101
2 2 102, 109, 107, 105
3 3 105, 106, 101, 102, 110
这是一个生成嵌套列表的解决方案:
item_list <- lapply(unique(id), function(i)
list(id=i,item=input_frame$item[id==i]) )
您可以通过以下方式访问id==2
的项目
item_list[[2]]$item
library(dplyr)
summarise(group_by(input_frame,id),item=paste(item,collapse=','))