R:基于特定条件聚合数据帧

时间:2015-01-16 05:38:59

标签: r list dataframe aggregate

我有一个数据框。我想基于另一个列表聚合它的一列。

df<-data.frame(X=c("a", "b", "c", "d"), Y=c(0.5, 0.4, 0.01, 0.09))
X     Y
a     0.5
b     0.4
c     0.01
d     0.09

l<-c("a", "c", "d")

l是需要组合在一起的列表。所以,在这里,我想将df$X中的所有元素分组到l中。

My desired result is:
X     Y
a'    0.6
b     0.4

关于如何做到这一点的任何想法?

感谢。

2 个答案:

答案 0 :(得分:4)

我们可以暂时&#34;将相关的X值更改为相同的分组变量,然后进行汇总。在这里,我随意选择l[1],这也恰好是"a"

aggregate(Y ~ X, within(df, X <- replace(X, X %in% l, l[1])), sum)
#   X   Y
# 1 a 0.6
# 2 b 0.4

within()来电中使用aggregate()的一个好处是原始df将保持不变。

答案 1 :(得分:1)

使用data.table

的选项
library(data.table)
df1 <- copy(df)
setkey(setDT(df1), X)[l, X:='a'][, list(Y=sum(Y)), X]
#  X   Y
#1: a 0.6
#2: b 0.4