Collapse based on row names, but list all collapsed values

大兔子大兔子 提交于 2020-01-04 08:13:13

问题


I have a data frame which I'd like to collapse based on row names, list all the values in a column (see below):

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

I would like to generate this output:

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

Can I use aggregate() for this? similar way I sum the values in R?

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

Thanks!


回答1:


Your expected output is not actually summing any values. Rather, you are concatenating them. You can use the c function in your aggregate call.

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

where dat is your data.

You could also use paste, or toString (which is basically 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

Alternatively, you can use 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



回答2:


You could try

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

Or using data.table

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


来源:https://stackoverflow.com/questions/26977626/collapse-based-on-row-names-but-list-all-collapsed-values

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!