如何在doBy包的summary_by公式中使用变量名而非列名
解决doBy::summary_by中使用变量指定列名的问题
summary_by的公式参数需要传入公式对象,直接用字符变量拼接的写法会被R当作列名查找,导致报错。可以通过以下两种方法用变量动态构建公式:
方法1:用paste+as.formula构建公式
先将变量名拼接成公式字符串,再转换为公式对象:
library(data.table) library(doBy) mtcars = data.table(mtcars) variable1 = "gear" variable2 = "am" variable3 = "mpg" # 构建公式字符串并转为公式对象 formula_str <- paste(variable3, "~", variable1, "+", variable2) formula_obj <- as.formula(formula_str) # 传入公式对象执行分组汇总 doBy::summary_by(data = mtcars, formula = formula_obj, FUN = "mean")
方法2:用reformulate函数(更简洁)
reformulate可以直接用字符向量构建公式,response参数指定左侧的响应变量,第一个参数是右侧的分组变量向量:
library(data.table) library(doBy) mtcars = data.table(mtcars) variable1 = "gear" variable2 = "am" variable3 = "mpg" # 直接构建公式对象 formula_obj <- reformulate(c(variable1, variable2), response = variable3) # 执行分组汇总 doBy::summary_by(data = mtcars, formula = formula_obj, FUN = "mean")
两种方法都能得到你期望的输出结果:
gear am mpg."mean" 3 0 16.10667 4 0 21.05000 4 1 26.27500 5 1 21.38000
内容的提问来源于stack exchange,提问作者nimliug
相关产品推荐
相关产品推荐

