【发布时间】:2018-11-10 14:03:39
【问题描述】:
我想聚合数据表的行,但是聚合函数取决于列的名称。
例如,如果列名是:
-
variable1或variable2,然后应用mean()函数。 -
variable3,然后应用max()函数。 -
variable4,然后应用sd()函数。
我的数据表总是有一个datetime 列:我想按时间聚合行。
但是,“数据”列的数量可能会有所不同。
我知道如何对所有列使用相同的聚合函数(例如 mean()):
dt <- dt[, lapply(.SD, mean),
by = .(datetime = floor_date(datetime, timeStep))]
或仅用于列的子集:
cols <- c("variable1", "variable2")
dt <- dt[ ,(cols) := lapply(.SD, mean),
by = .(datetime = floor_date(datetime, timeStep)),
.SDcols = cols]
我想做的是这样的:
colsToMean <- c("variable1", "variable2")
colsToMax <- c("variable3")
colsToSd <- c("variable4")
dt <- dt[ ,{(colsToMean) := lapply(.SD???, mean),
(colsToMax) := lapply(.SD???, max),
(colsToSd) := lapply(.SD???, sd)},
by = .(datetime = floor_date(datetime, timeStep)),
.SDcols = (colsToMean, colsToMax, colsToSd)]
我查看了data.table in R - apply multiple functions to multiple columns,它给了我使用自定义函数的想法:
myAggregate <- function(x, columnName) {
FUN = getAggregateFunction(columnName) # Return mean() or max() or sd()
return FUN(x)
}
dt <- dt[, lapply(.SD, myAggregate, ???columName???),
by = .(datetime = floor_date(datetime, timeStep))]
但我不知道如何将当前列名传递给myAggregate()...
【问题讨论】:
标签: r data.table