r - 使用聚合将多个函数应用于数据框中的每一列

标签 r aggregate split-apply-combine

当我需要按顺序将多个函数应用于多个列并按多个列进行聚合并希望将结果绑定(bind)到数据框中时,我通常使用 aggregate()通过以下方式:

# bogus functions
foo1 <- function(x){mean(x)*var(x)}
foo2 <- function(x){mean(x)/var(x)}

# for illustration purposes only
npk$block <- as.numeric(npk$block) 

subdf <- aggregate(npk[,c("yield", "block")],
                   by = list(N = npk$N, P = npk$P),
                   FUN = function(x){c(col1 = foo1(x), col2 = foo2(x))})

通过使用以下方法可以将结果放在有序的数据框中:

df <- do.call(data.frame, subdf)

我可以通过以某种方式更智能地使用 aggregate() 来避免对 do.call() 的调用这种情况还是从一开始就使用另一个基本的 R 解决方案来缩短整个过程?

最佳答案

正如@akrun 所建议的,dplyrsummarise_each 非常适合这项任务。

library(dplyr)
npk %>% 
  group_by(N, P) %>%
  summarise_each(funs(foo1, foo2), yield, block)

# Source: local data frame [4 x 6]
# Groups: N
# 
#   N P yield_foo2 block_foo2 yield_foo1 block_foo1
# 1 0 0   2.432390          1   1099.583      12.25
# 2 0 1   1.245831          1   2205.361      12.25
# 3 1 0   1.399998          1   2504.727      12.25
# 4 1 1   2.172399          1   1451.309      12.25

关于r - 使用聚合将多个函数应用于数据框中的每一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26624587/

相关文章:

Django模型同时聚合和和计数

python - 查找数据框中每组另一个常见单元格中最常见的单元格

r - 如何使用 dplyr 计算嵌套数据框中的行数

python - groupby 转换中的 Pandas 时间戳差异

r - 为 geom_polygon 添加图例

r - 如何读取可变数量的文件,然后在 R 中组合数据帧?

r - 如何包含 nmath.h?

r - 了解两个 aggregate() 语法如何处理包含 NA 值的数据框

python - 将 groupby 与扩展和自定义函数一起使用

r - 查找 R 中两个时间戳之间的重叠以分配类次