我读了许多有关将列名传递给data.table函数的文章,但是我没有看到一篇涉及将多个变量传递给"by"的文章。我通常使用类似这样的代码来按组计算汇总统计信息。
# Data
library(data.table)
dt=mtcars
setDT(dt)
# Summary Stats Example
dt[cyl==4,.(Count=.N,
Mean=mean(hp),
Median=median(hp)),
by=.(am,vs)]
# am vs Count Mean Median
# 1: 1 1 7 80.571 66
# 2: 0 1 3 84.667 95
# 3: 1 0 1 91.000 91
我无法使以下函数起作用:
# Function
myFun <- function(df,i,j,by){
df[i==4,.(Count=.N,
Mean=mean(j),
Median=median(j)),
by=.(am,by)]
}
myFun(dt,i='cyl',j='hp',by='vs')
请注意,我在这个例子中硬编码了“4”和“am”。当只使用一个分组变量时,
get()
函数可以工作,但是当使用多个分组变量时失败了。欢迎指导如何在编写data.table函数时正确使用get/quote/eval/substitute/parse/as.name等函数。