按另一列 r 中的值折叠字符向量
Collapse a character vector by value in another column r
我有一个数据框,一列中有一组字符串,另一列中有一个分组变量(一个字符串,但可能是一个因素)。我想 collapse
数据框,以便通过分组变量将字符串折叠成元素。有关信息,我将在该向量上使用 Corpus(VectorSource(x))
(即,我正在崩溃以创建文档)。
例如:
eg Type
1 tomato F
2 mushrooms F
3 snow W
4 chips F
5 rain W
这将被转换为具有两个元素的字符向量,即 'W' 的成员和 'F' 的成员。
我知道我可以使用:
a <- paste(x$eg,collapse=" ")
要获取所有这些,当然只需手动创建子集(或循环)。
我想知道是否有 plyr
函数(但看不到),我认为 tapply
或 by
可能是我正在寻找的(在 base 中)但我我不清楚它们将如何在这里使用。
我不想在此处输出数据框,而是要清楚地探索标记的重复项,这些方法适用于此问题。
刚刚找到答案,这应该在 plyr
包中起作用:
a <- vaggregate(x$eg,x$Type,function(y) paste0(y,collapse=" "))
编辑: 请参阅下面的评论 - 函数 (y) 是多余的,这可以从 base
完成
使用 data.table 包回答:
> dt <- data.table(eg = letters[1:8], Type=rep(c("F","W"), 4))
> a <- dt[, paste(eg, collapse=" "), by=Type]
> a
Type V1
1: F a c e g
2: W b d f h
使用 data.table 的好处是,即使您达到数百万行,这仍然会在几秒钟内 运行。
我有一个数据框,一列中有一组字符串,另一列中有一个分组变量(一个字符串,但可能是一个因素)。我想 collapse
数据框,以便通过分组变量将字符串折叠成元素。有关信息,我将在该向量上使用 Corpus(VectorSource(x))
(即,我正在崩溃以创建文档)。
例如:
eg Type
1 tomato F
2 mushrooms F
3 snow W
4 chips F
5 rain W
这将被转换为具有两个元素的字符向量,即 'W' 的成员和 'F' 的成员。 我知道我可以使用:
a <- paste(x$eg,collapse=" ")
要获取所有这些,当然只需手动创建子集(或循环)。
我想知道是否有 plyr
函数(但看不到),我认为 tapply
或 by
可能是我正在寻找的(在 base 中)但我我不清楚它们将如何在这里使用。
我不想在此处输出数据框,而是要清楚地探索标记的重复项,这些方法适用于此问题。
刚刚找到答案,这应该在 plyr
包中起作用:
a <- vaggregate(x$eg,x$Type,function(y) paste0(y,collapse=" "))
编辑: 请参阅下面的评论 - 函数 (y) 是多余的,这可以从 base
使用 data.table 包回答:
> dt <- data.table(eg = letters[1:8], Type=rep(c("F","W"), 4))
> a <- dt[, paste(eg, collapse=" "), by=Type]
> a
Type V1
1: F a c e g
2: W b d f h
使用 data.table 的好处是,即使您达到数百万行,这仍然会在几秒钟内 运行。