r - 将参数传递给 data.table 聚合函数

标签 r data.table

我有一个函数可以计算一个变量的加权平均值,并使用 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

关于r - 将参数传递给 data.table 聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20196994/

相关文章:

r - 从 R 中的文本中提取字符级 n-gram

r - 使用 dplyr 计算融化数据上某个值的出现次数

r - 列出从R包导出的对象而不附加它

r - data.table join + update with mult ='first' 给出了意想不到的结果

r - 大字符串向量到 data.frame

r - 使用 data.table 计算所有数字列的汇总统计数据(例如平均值)

r - 如何计算不同变量的不同列数之间的最大差异

r - R data.table 中缺失值的有效转换

Rstudio - 连接到 HDInsight Spark 集群 SparkR

r - 在 R 中生成和命名变量的动力转换