我有一个数据框,每行代表一个人。该数据框有两个变量:年龄和年份。我想制作一张每年平均年龄的表格。我该怎么办?
我能想到的最好的是xtabs(age ~ year, dataframe)
,但这给了我每年的年龄总和。
答案 0 :(得分:17)
使用aggregate
:
xtabs(hp~cyl+gear,aggregate(hp~cyl+gear,mtcars,mean))
gear
cyl 3 4 5
4 97.0000 76.0000 102.0000
6 107.5000 116.5000 175.0000
8 194.1667 0.0000 299.5000
答案 1 :(得分:5)
查看plyr包,特别是ddply
ddply(dataframe, .(year), summarise, mean(age))
如果你必须使用xtabs ...请参阅上面的答案。
答案 2 :(得分:5)
我很高兴xtabs
解决方案适合您。我必须加载一个包,干扰它(并给出一个错误)。另一种解决方案是:
tapply(dfrm$age, dfrm$year, FUN=mean)
要获得表(数组)的其他维度,只需在list(fac1, fac2, fac3)
形式的第二个INDEX参数中添加其他因子。
应用于使用mtcars的示例:
tapply(mtcars$hp, list(mtcars$cyl,mtcars$gear), mean)
3 4 5
4 97.0000 76.0 102.0
6 107.5000 116.5 175.0
8 194.1667 NA 299.5
甚至更紧凑:
with(mtcars, tapply(hp, list(cyl, gear), mean))
答案 3 :(得分:1)
另一个解决方案是使用2个xtabs函数,第一个用于计算年龄总和,第一个用于计算每个组的人数,然后通过总和/人数获得平均值。
如, xtabs(年龄〜年,数据帧)/ xtabs(〜年,数据帧)
但是,聚合方法可用于计算应用于数据帧的中值函数或其他函数。绝对更灵活。