我有一个纵向电子表格,其中包含许多个人的不同增长变量。目前我的R代码看起来像这样:
D5<-ifelse(growth$agyr == 5, growth$R.2ND.DIG.AVERAGE,NA)
由于它是纵向的,因此我在多个年龄段对每个人进行相同的测量,因此变量agyr。在这个例子中,它是指所有在5岁时进行手指测量的孩子。
我想做的是为所有年龄段的人做这些,这样我就不必每次都定义一个对象,所以我基本上可以为任何给定的agyr运行一些关于手指长度的摘要统计数据。当然这是可能的,但我仍然是R的初学者。
答案 0 :(得分:1)
tapply()
是你的朋友。例如:
with(growth,
tapply(R.2ND.DIG.AVERAGE,agyr,mean)
)
另请参阅?tapply
以及关于R的一些好的介绍书。还有?with
,这个功能可以让您的代码更加可读。
如果您想要平均多个级别,可以给tapply()
一系列因子。说gender
也是一个变量(一个因素!),你可以这样做:
with(growth,
tapply(R.2ND.DIG.AVERAGE,list(agyr,gender),mean)
)
tapply()
返回类似数组的结构(向量,矩阵或多维数组,具体取决于分类因子的数量)。如果您希望将结果放在数据框中和/或一次汇总多个变量,请查看?aggregate
,例如:
thevars <- c("R.2ND.DIG.AVERAGE","VAR2","MOREVAR")
aggregate(growth[thevars],by=list(agyr,gender), FUN="mean")
或使用公式界面:
aggregate(cbind(R.2ND.DIG.AVERAGE,VAR2,MOREVAR) ~ agyr + gender,
data=growth, FUN = "mean")
确保您也检查帮助文件。 tapply()
和aggregate()
都非常强大,还有很多其他可能性。