我是 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
的巫术。
更简单的方法是通过 aggregate
的 by
参数,这对于通过变量名进行的替换更友好。
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/