我有一个数据框,我想根据行名称折叠,列出一列中的所有值(见下文):
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)
谢谢!
答案 0 :(得分:5)
您的预期输出实际上并未对任何值求和。相反,你是连接它们。您可以在c
来电中使用aggregate
功能。
aggregate(value ~ name, dat, c)
# name value
# 1 nameA 10, 3, 5
# 2 nameB 5
# 3 nameC 1, 44
其中dat
是您的数据。
您还可以使用paste
或toString
(基本上是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]