1
我有一個data.table,並希望在多個列上運行多個聚合,同時該表被分組到另一個變量上。我曾嘗試以下:組上多個變量的多個聚合
library(data.table)
DT <- data.table(a = 1:10,
b = 10:1,
group = rep(1:2, each=5))
aggs <- function(x) list(mean = mean(x), sd = sd(x))
DT[, lapply(.SD, aggs), .(group), .SDcols = c('a', 'b')]
這並不完全工作,因爲我要麼需要names()
的列或輸出拆分成列 - 說a.mean
,b.mean
等:
group a b
1: 1 3 8
2: 1 1.581139 1.581139
3: 2 8 3
4: 2 1.581139 1.581139
關於[這個答案](https://stackoverflow.com/questions/42163675/data-table-lapply-a-function-with-multicolumn-output#42164417) - 也許'熔化(DT ,id =「group」)[,Reduce(c,lapply(.SD,aggs)),「group,variable」]或dcast(melt(DT,id =「group」)[,Reduce(c,lapply (.SD,aggs)),「group,variable」],group_variable,value.var = c(「mean」,「sd」))'? – lukeA
@lukeA我想沒有必要融化。類似於dcast(DT,group〜。,fun = list(mean,sd),value.var = c(「a」,「b」))「儘管沒有OP的首選col名稱。 – Frank
轉換爲寬格式通常是一個壞主意,因爲使用結果數據集進行進一步分析實際上是不可能的。 –