【问题标题】:How can I get xtabs to calculate means instead of sums in R?如何让 xtabs 计算平均值而不是 R 中的总和?
【发布时间】:2012-02-18 22:24:47
【问题描述】:

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

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

【问题讨论】:

    标签: r average mean


    【解决方案1】:

    使用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
    

    【讨论】:

    • 完美!我必须补充一下,这是一个非常优雅的解决方案。谢谢!
    【解决方案2】:

    看看 plyr 包,特别是ddply

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

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

    【讨论】:

    • 感谢您向我展示了另一个非常优雅的解决方案,但由于我的实际问题涉及三个变量,所以我仍然使用 stabs。 :)
    • 你也可以继续在ddply中列出变量ddply(dataframe, .(year), summarise, mean(age), max(height), sd(weight), etc...)
    【解决方案3】:

    很高兴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))
    

    【讨论】:

      【解决方案4】:

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

      例如, xtabs(年龄~年,数据框)/xtabs(~年,数据框)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 1970-01-01
        • 2018-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多