R:根据ID将行连接到单个列

时间:2015-11-13 14:01:02

标签: r

前段时间我曾就如何改变我现在要做的事情寻求帮助,可以找到here的讨论。无论如何,我现在需要将我的数据加入到曾经的格式中。也就是说,将每个ID的单独行(每个包含一个单词)连接成一个句子。例如:

输入:

id word
1 Lorem
1 ipsum
1 dolor
1 sit
1 amet
2 consectetur
2 adipiscing
2 elit
3 Donec
...

输出:

id text
1 Lorem ipsum dolor sit amet
2 consectetur adipiscing elit
3 Donec euismod enim quis 
4 nunc fringilla sodales
5 Etiam tempor ligula vitae 
6 pellentesque dictum

首先,我尝试使用reshape包及其melt()cast()函数执行此操作。我也尝试了tidyr包。但是,这些函数依赖于变量名称列,该列指定每个新列的列名称。不完全是我的情况(每个句子可以有不同的长度)。

如何在R中执行此任务?

1 个答案:

答案 0 :(得分:2)

我们可以使用data.table。我们将'data.frame'转换为'data.table'(setDT(df1)),按'id'分组,我们paste将'word'组合在一起。

library(data.table)
setDT(df1)[, list(text= paste(word, collapse=' ')), by = id]
#   id                        text
#1:  1  Lorem ipsum dolor sit amet
#2:  2 consectetur adipiscing elit
#3:  3                       Donec

或者使用dplyr,我们可以按“id”和paste“word”列分组。

library(dplyr)
df1 %>%
    group_by(id) %>%
    summarise(text= paste(word, collapse=' '))

base R选项

aggregate(word~id, df1, FUN = paste, collapse=' ')

数据

df1 <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L),
word = c("Lorem", 
"ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", 
"elit", "Donec")), .Names = c("id", "word"), class = "data.frame", 
row.names = c(NA, -9L))