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