gpt4 book ai didi

r - 在 data.table 函数中将多个列名传递给 "by"

转载 作者:行者123 更新时间:2023-12-04 04:18:48 24 4
gpt4 key购买 nike

我读过很多关于将列名传递给 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.tableby 部分创建一个字符向量,它就可以工作:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com