3

当我需要将多个函数按顺序应用于多列并按多列聚合并希望将结果绑定到数据框中时,我通常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)

do.call()可以通过在这种情况下以某种方式使用smarter来避免调用,或者从一开始就aggregate()使用另一个基本解决方案来缩短整个过程吗?R

4

2 回答 2

2

正如@akrun 建议的那样,dplyr'ssummarise_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
于 2014-10-29T09:46:38.783 回答
0

您可以使用

df=data.frame(as.list(aggregate(...
于 2019-07-24T19:03:51.787 回答