将数据框字符串列转换/转置为单行

时间:2015-08-17 14:46:29

标签: r

试图做到这一点:

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"))

3 个答案:

答案 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)