如何让xtabs计算均值而不是R中的和?

Wal*_*cio 10 average r mean

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

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

Jam*_*mes 18

用途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
Run Code Online (Sandbox Code Playgroud)


Jus*_*tin 6

特别是看看plyr包 ddply

ddply(dataframe, .(year), summarise, mean(age))
Run Code Online (Sandbox Code Playgroud)

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

  • 你可以继续列出ddply中的变量以及`ddply(数据帧,.(年),汇总,平均值(年龄),最大值(高度),sd(权重)等等). (2认同)

42-*_*42- 5

我很高兴xtabs解决方案适合你.我必须加载一个包,干扰它(并给出一个错误).另一种解决方案是:

tapply(dfrm$age, dfrm$year, FUN=mean)
Run Code Online (Sandbox Code Playgroud)

要获得表(数组)的其他维度,只需在表单中的第二个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
Run Code Online (Sandbox Code Playgroud)

或者更紧凑:

with(mtcars, tapply(hp, list(cyl, gear), mean))
Run Code Online (Sandbox Code Playgroud)