聚合数据帧中的多行以列出

时间:2016-03-29 08:06:08

标签: r dataframe data.table

我正在尝试将数据框中多行的数据转换为列表(或类似结构)。

我的数据如下:

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包,我相信它包含一个解决方案,但我还没有找到它)

感谢您的帮助!

1 个答案:

答案 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'在一起(toStringpaste(..., collapse=", ")

的包装器
library(data.table)
setDT(df)[, list(b= toString(b)), a]