我有一个函数可以计算变量的加权平均值,并使用以下方法按时间段对其进行分组data.table
聚合语法。但是,我想以编程方式提供加权列的名称。有没有办法在仍然使用传统方法的情况下实现这一目标data.table
句法?功能wtmean1
下面演示了我想要做什么的想法(但它会产生错误)。功能wtmean2
作品并受到启发data.table
FAQ,但是传入整个表达式比较麻烦,并且无法提取出函数内可能需要的权重列的名称。有没有办法得到wtmean1
要工作,我传入的唯一参数是字符串中加权列的名称?
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)