gpt4 book ai didi

r - 将聚合对象绑定(bind)到原始数​​据框

转载 作者:行者123 更新时间:2023-12-01 09:02:21 26 4
gpt4 key购买 nike

我有一个用于聚合的 data.frame,它只需由 plyr 中的 ddply 完成。现在的目标是编写一个将聚合对象自动绑定(bind)到原始数​​据的函数。问题是,可以有多个聚合变量。

以下是一个只有一个聚合变量的例子:

这里是我的数据框:

  M O
1 1 6
2 2 7
3 2 4
4 1 6

然后使用 ddply 我得到“O”的聚合:

TEST <- ddply(.data = DF,
.variables = c("M"),
.fun = summarise,
NEW = sum(O))

结果如下:

  M NEW
1 1 12
2 2 11

我现在想做的是编写一个函数,使我能够将变量“New”绑定(bind)到原始data.frame。

在循环中,它适用于:

for(i in 1:nrow(TEST)) {
DF$New[DF$M == TEST$M[i]] <- TEST$NEW[i]
}

M O New
1 1 6 12
2 2 7 11
3 2 4 11
4 1 6 12

现在我想把它转换成一个函数,即使有多个聚合变量,它也能提供等效的输出。

最佳答案

您可以在基础 R 中使用 avewithin 并添加多个列,如下所示。假设您的 data.frame 被称为“mydf”:

within(mydf, {
P <- ave(O, M, FUN = sum)
Q <- ave(O, M, FUN = mean)
})
# M O Q P
# 1 1 6 6.0 12
# 2 2 7 5.5 11
# 3 2 4 5.5 11
# 4 1 6 6.0 12

当然,更好的是 data.table 包:

library(data.table)
DT <- data.table(mydf)
DT[, `:=`(SUM = sum(O), MEAN = mean(O)), by = "M"]
DT
M O SUM MEAN
1: 1 6 12 6.0
2: 2 7 11 5.5
3: 2 4 11 5.5
4: 1 6 12 6.0

关于r - 将聚合对象绑定(bind)到原始数​​据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14814851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com