基于行名称折叠,但列出所有折叠值

时间:2014-11-17 16:48:24

标签: r collapse

我有一个数据框,我想根据行名称折叠,列出一列中的所有值(见下文):

 name   value
 nameA  10
 nameA  3
 nameA  5
 nameB  5
 nameC  1
 nameC  44

我想生成此输出:

 name   value
 nameA  10,3,5
 nameB  5
 nameC  1,44

我可以使用aggregate()吗?类似的方法我总结R?

中的值
  

sum< -aggregate(cbind(value)~name,data = x,FUN = sum)

谢谢!

2 个答案:

答案 0 :(得分:5)

您的预期输出实际上并未对任何值求和。相反,你是连接它们。您可以在c来电中使用aggregate功能。

aggregate(value ~ name, dat, c)
#    name    value
# 1 nameA 10, 3, 5
# 2 nameB        5
# 3 nameC    1, 44

其中dat是您的数据。

您还可以使用pastetoString(基本上是paste(..., collapse = ", ")。

aggregate(value ~ name, dat, toString)
#    name    value
# 1 nameA 10, 3, 5
# 2 nameB        5
# 3 nameC    1, 44
aggregate(value ~ name, dat, paste, collapse = ",")
#    name  value
# 1 nameA 10,3,5
# 2 nameB      5
# 3 nameC   1,44

或者,您可以使用dplyr

library(dplyr)
group_by(dat, name) %>% summarize(value = toString(value))
#    name    value
# 1 nameA 10, 3, 5
# 2 nameB        5
# 3 nameC    1, 44

答案 1 :(得分:3)

你可以尝试

aggregate(value~name, df, I)
#  name    value
#1 nameA 10, 3, 5
#2 nameB        5
#3 nameC    1, 44

或使用data.table

library(data.table)
setDT(df)[, list(value=list(value)), by=name]