R:根据特定条件聚合数据框
R: aggregate a data frame based on certain condition
我有一个数据框。我想根据另一个列表聚合其中的一列。
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 是需要组合在一起的列表。所以,在这里我想将 l 中存在的 df$X
中的所有元素分组。
My desired result is:
X Y
a' 0.6
b 0.4
知道怎么做吗?
谢谢。
我们可以"temporarily"将相关的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
在 aggregate()
调用中使用 within()
的一个好处是原始 df
将保持不变。
一个选项使用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
我有一个数据框。我想根据另一个列表聚合其中的一列。
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 是需要组合在一起的列表。所以,在这里我想将 l 中存在的 df$X
中的所有元素分组。
My desired result is:
X Y
a' 0.6
b 0.4
知道怎么做吗?
谢谢。
我们可以"temporarily"将相关的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
在 aggregate()
调用中使用 within()
的一个好处是原始 df
将保持不变。
一个选项使用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