我正在尝试将数据框中多行的数据转换为列表(或类似结构)。
我的数据如下:
data.frame("a"=c(1,1,2,3,3,3), "b"=c("x","y","x","x","y","z"))
a b
1 1 x
2 1 y
3 2 x
4 3 x
5 3 y
6 3 z
我正在寻找的结果是这样的:
a b
1 1 x, y
2 2 x
3 3 x, y, z
我可以通过循环遍历数据帧的所有行并附加到单个列表来低效地执行此操作,但我想看看是否有更好的方法(我正在研究data.table包,我相信它包含一个解决方案,但我还没有找到它)
感谢您的帮助!
答案 0 :(得分:0)
我们可以使用aggregate
aggregate(b~a, df, FUN=toString)
# a b
#1 1 x, y
#2 2 x
#3 3 x, y, z
或者使用data.table
,我们会转换' data.frame'到' data.table' (setDT(df)
),按' a',paste
分组' b'在一起(toString
是paste(..., collapse=", ")
)
library(data.table)
setDT(df)[, list(b= toString(b)), a]