11

我有一个数据框,其中每一行代表一个人。该数据框有两个变量:年龄和年份。我想制作一张每年平均年龄的表格。我该怎么做?

我能想到的最好的结果是xtabs(age ~ year, dataframe),但这给了我每年的年龄总和。

4

4 回答 4

19

使用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
于 2012-01-25T18:08:00.020 回答
6

看看 plyr 包,特别是ddply

ddply(dataframe, .(year), summarise, mean(age))

如果您必须使用 xtabs ...请参阅上面的答案。

于 2012-01-25T18:08:52.670 回答
5

我很高兴该xtabs解决方案适合您。我必须加载一个对我造成干扰的包(并给出错误)。另一种解决方案是:

tapply(dfrm$age, dfrm$year, FUN=mean)

要获得表(数组)的附加维度,只需继续向表单中的第二个 INDEX 参数添加附加因子list(fac1, fac2, fac3)

应用于使用 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))
于 2012-01-25T18:38:00.673 回答
1

另一种解决方案是使用 2 个 xtabs 函数,第一个计算年龄总和,第二个计算每个组的人数,然后通过总和/人数获得平均值。

例如,xtabs(age ~ year, dataframe)/xtabs(~ year, dataframe)

但是,聚合方法可用于计算应用于数据帧的中值或其他函数。肯定更灵活。

于 2017-06-01T01:00:44.100 回答