按另一列r中的值折叠字符向量

时间:2015-01-23 13:43:38

标签: r plyr tapply split-apply-combine

我有一个数据框,在一列中有一组字符串,在另一列中有一个分组变量(一个字符串,但可能是一个因子)。我想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函数(但看不到一个),我认为tapplyby可能是我正在寻找的(在基础中)但我我不清楚他们将如何在这里使用。

我不打算在这里输出数据框,但是要清楚地探索标记的重复数据,这些方法适用于这个问题。

2 个答案:

答案 0 :(得分:1)

刚刚找到答案,这应该来自plyr包:

a <- vaggregate(x$eg,x$Type,function(y) paste0(y,collapse=" "))

编辑:请参阅下面的评论 - 函数(y)是多余的,可以从base

完成

答案 1 :(得分:1)

使用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的好处是,即使你获得了数百万行,它仍会在几秒钟内运行。