试图做到这一点:
id | name
-----------------------
10 | After Earth
10 | Battle of the Year
10 | Captain Phillips
12 | Carrie
12 | Chernobyl Diaries
成为这个:
id | big_ass_string
--------------------------
10 | After Earth Battle of the Year Captain Phillips
12 | Carrie Chernobyl Diaries
即,"演员/转置"列中的一串字符串到按行分组的单行(一个大字符串)。我使用的条款" cast"和"转置"在这里,但这并不完全正确,因为这些功能都不起作用。任何想法如何实现这一目标?
require(dplyr)
x = data_frame(id = c(10,10,10,12,12), name = c("After Earth","Battle of the Year","Captain Phillips","Carrie","Chernobyl Diaries"))
答案 0 :(得分:2)
我猜OP正在使用dplyr
。在这种情况下,我们可以按'id'列和summarise
分组,以paste
'name'列创建变量'big_ass_string'。
library(dplyr)
x %>%
group_by(id) %>%
summarise(big_ass_string=paste(name, collapse=' '))
# id big_ass_string
#1 10 After Earth Battle of the Year Captain Phillips
#2 12 Carrie Chernobyl Diaries
使用base R
aggregate
选项会使用公式方法,在~
的{{1}},'name'变量的RHS上使用分组变量,我们使用LHS
FUN
指定为paste
collapse = ' '
答案 1 :(得分:1)
aggregate(name~id, FUN='paste', x, collapse=' ')
答案 2 :(得分:0)
如果您专门在数据框之后,这比dplyr更整洁,因为它输出到列表。从语法上讲它很优雅:
tapply(x$name, x$id, paste)