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()
通过某种方式使用aggregate()
更聪明在这种情况下或缩短整个过程从另一个基地R
解决方案从一开始?
请注意,在'subdf'我也会有一个数据框。但它将是一个数据框,其中包含我想要避免的某些列中的矩阵! – 2014-10-29 07:15:23
这个任务使用'data.table'非常简单(这是为什么这个包很受欢迎的几个原因之一)。我不认为你可以比你展示的方式更容易地在基本R中达到你想要的结果。 – nicola 2014-10-29 07:17:14
@ lord.garbage我猜你不需要'cbind','do.call(data.frame,subdf)'就足够了。另一个选择是使用'dplyr'中的'summarise_each'。 – akrun 2014-10-29 07:20:03