前段时间我曾就如何改变我现在要做的事情寻求帮助,可以找到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
中执行此任务?
答案 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))