【发布时间】:2014-12-24 19:36:42
【问题描述】:
当我需要将多个函数顺序应用到多列并按多列聚合并希望将结果绑定到数据框中时,我通常以以下方式使用 aggregate(): p>
# 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() smarter 或者通过使用另一个基础R 解决方案来缩短整个过程开始?
【问题讨论】:
-
请注意,在
subdf我也会有一个数据框。但这将是一个数据框,其中包含我非常想避免的某些列中的矩阵! -
使用
data.table完成这项任务非常简单(这也是该软件包如此受欢迎的几个原因之一)。我不认为你可以比你展示的方式更容易地在基础 R 中实现你想要的结果。 -
@lord.garbage 我猜你不需要
cbind,do.call(data.frame, subdf)就足够了。另一种选择是使用来自dplyr的summarise_each。 -
@akrun,干杯。我会相应地修改问题。
标签: r aggregate split-apply-combine