我有一个函数来计算变量的加权平均值,并使用data.table聚合语法按时间段对其进行分组.但是,我想以编程方式提供加权列的名称.有没有办法在仍然使用传统的data.table语法的同时实现这一
wtmean1 <- function(dt1, weight) {
dt1[,weighted.mean(x, weight), by=timeperiod]
}
wtmean2 <- function(dt1, expr) {
dt1[,eval(substitute(expr)), by=timeperiod]
}
mydata <- data.table(x=1:10, timeperiod=rep(1:2,5), wt1=rnorm(10), wt2=rnorm(10))
wtmean1(mydata, "wt1") # ERROR
wtmean2(mydata, weighted.mean(x, wt2))
你可以使用get:
wtmean1 <- function(dt1, weight) {
dt1[,weighted.mean(x, get(weight)), by=timeperiod]
}
使用您的示例数据:
> set.seed(1) > mydata <- data.table(x=1:10, timeperiod=rep(1:2,5), wt1=rnorm(10), wt2=rnorm(10)) > wtmean1(mydata, "wt1") timeperiod V1 1: 1 -102.476925 2: 2 3.362326
