将聚合对象绑定到原始数​​据帧

Die*_*oal 3 aggregate r

我有一个用于聚合的data.frame,它完全由ddplyplyr 完成.现在的目标是编写一个将聚合对象自动绑定到原始数​​据的函数.问题是,可能有多个聚合变量.

以下是仅包含一个聚合变量的示例:

这里有我的数据框:

  M O
1 1 6 
2 2 7 
3 2 4 
4 1 6 
Run Code Online (Sandbox Code Playgroud)

然后ddply我得到"O"的聚合:

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

结果如下:

  M NEW
1 1  12
2 2  11
Run Code Online (Sandbox Code Playgroud)

我现在要做的是编写一个函数,使我能够将变量" New" 绑定到原始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 
Run Code Online (Sandbox Code Playgroud)

现在我想将它转换为一个函数,即使只有一个聚合变量,也可以提供等效的输出.

A5C*_*2T1 5

您可以使用avewithin在基础R和新增多列如下.假设您的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
Run Code Online (Sandbox Code Playgroud)

当然,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
Run Code Online (Sandbox Code Playgroud)