r - 将字符转换为 R 中公式中使用的变量名称

标签 r

我是 R 的初学者,我遇到了一个对你来说可能很简单的问题。如果可以给我一些帮助,请提前致谢。我不确定标题是否反射(reflect)了我想问的问题。为了让我的问题更清楚,我将使用一个简单的例子。

假设我们的数据框包含两个因素(FE 和 DI)和三个变量(SR1、SR2 和 SR3),例如:

df<-data.frame(FE=rep(c("FL","FM","FH"),4),DI=rep(c("DL","DH"),each=6),
SR1=rpois(12,10),SR2=rpois(12,15),SR3=rpois(12,20))

我知道如何使用“聚合”根据因子计算变量的均值,例如:

df.me1<-aggregate(SR1~FE,df,mean)
df.me2<-aggregate(cbind(SR1,SR2,SR3)~FE+DI,df,mean)

然后,我制作了两个字符(vars 和 facs),由三个变量的名称和两个因子组成:

vars<-c("SR1","SR2","SR3")
facs<-c("FE","DI")

现在,由于某种原因,我想在下面的公式中进行计算

df.me1<-aggregate(vars[1]~facs[1],df,mean)
df.me2<-aggregate(cbind(vars[1],vars[2],vars[3])~facs[1]+facs[2],df,mean)

这些代码肯定是不行的,那么我应该怎么做才能让它们以这种方式工作呢?

最佳答案

有两种方法可以做到这一点。一种是通过aggregate 的公式界面,这是您目前正在尝试做的。为了使这项工作,您必须创建一个包含因变量和自变量的字符串。然后,您将使用 as.formula() 将该字符串转换为公式对象。这太复杂了,因为它需要大量使用 sprintf 和/或 paste 的巫术。

更简单的方法是通过 aggregateby 参数,这对于通过变量名进行的替换更友好。

df.me1 <- aggregate(df[vars[1]], by = df[facs[1]], FUN = mean)

  FE   SR1
1 FH 10.00
2 FL 10.00
3 FM  9.25

df.me2 <- aggregate(df[vars], by = df[facs], FUN = mean)

  FE DI  SR1  SR2  SR3
1 FH DH  9.0 11.5 22.5
2 FL DH  8.0 16.5 21.5
3 FM DH 10.0 14.5 21.0
4 FH DL 11.0 16.5 18.0
5 FL DL 12.0 18.0 15.0
6 FM DL  8.5 13.0 24.0

关于r - 将字符转换为 R 中公式中使用的变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118752/

相关文章:

r - 如何获取 R 代码表达式中的所有变量?

r - 防止在使用save()或save.image()时覆盖文件

r - 使用带有传单的 geoJSON 字符串

r - 如何使用 apply 或 dplyr 有条件地转换特定变量

python - 在 python block 中定义函数,然后从 R block 中调用它

r - 一种快速计算点到 R 中 y=x 的正交距离的方法

r - 如何将变量重新编码为数字?

r - test_that 与 match.fun 一起使用时,在两级深度时抛出意外错误

r - 优化 R 中的买卖信号

r - 抑制树状图中的叶标签