作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读过很多关于将列名传递给 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()
仅在分组变量使用 1 时有效,但在使用多个分组变量时失败。感谢有关在编写 data.table 函数时如何正确使用 get/quote/eval/substitute/parse/as.name/etc 的指导。
最佳答案
只需为 data.table
的 by
部分创建一个字符向量,它就可以工作:
myFun <- function(df, i, j, by){
df[get(i) == 4, .(Count = .N,
Mean = mean(get(j)),
Median = median(get(j))),
by = c(by, 'am')]
}
myFun(dt, i = 'cyl', j = 'hp', by = 'vs')
#vs am Count Mean Median
#1: 1 1 7 80.57143 66
#2: 1 0 3 84.66667 95
#3: 0 1 1 91.00000 91
关于r - 在 data.table 函数中将多个列名传递给 "by",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59968755/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!