根据特定条件对数据框进行聚合

3
我有一个数据框,想要根据另一个列表对其中一列进行聚合。
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个回答

4
我们可以“临时”将相关的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
一个使用 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接