【问题标题】:Calculating the mean of values in tables using formulae [R]使用公式 [R] 计算表中值的平均值
【发布时间】:2011-07-26 02:49:10
【问题描述】:

我知道 xtabs 和 table 等命令允许用户进行交叉制表

例如,以下命令生成一个数据透视表,显示具有相同齿轮数和气缸数的汽车数量。

> xtabs(~cyl+gear, data = mtcars)
   gear
cyl  3  4  5
  4  1  8  2
  6  2  4  1
  8 12  0  2
> 

我们可以扩展公式,这样它就可以显示每个箱子中汽车的马力总和

> xtabs(hp~cyl+gear, data = mtcars)
   gear
cyl    3    4    5
  4   97  608  204
  6  215  466  175
  8 2330    0  599
> 

我现在想知道,是否可以计算每个垃圾箱中汽车的马力平均值?例如像这样的xtabs(mean(hp)~cyl+gear, data = mtcars)

【问题讨论】:

  • 我不知道如何使用xtabs(我以前从未使用过),但要使用reshape 包,一种方法是cast(melt(mtcars, id = c("cyl", "gear")), cyl ~ gear, subset = variable == "hp", mean)
  • xtabs(hp~cyl+gear, data = mtcars)/xtabs(~cyl+gear, data = mtcars)

标签: r


【解决方案1】:

您可以使用reshape 库中的cast 在一行中完成此操作

cast(mtcars, cyl ~ gear, value = 'hp', fun = mean)

【讨论】:

    【解决方案2】:

    我从 r-help 收到的一个有趣的回复如下:

    > attach(mtcars)
    > tapply(hp,list(cyl,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
    > 
    

    【讨论】:

    • 是的,这是正确的!我不使用 xtabs,我只使用标准的 tapply、apply、lapply 功能,因为它们完成了所有工作。从我第一次新建它必须可以用标准的tapply解决,它是!谢谢。
    • +1 表示 base,但不需要附加,只需在 apply 语句中使用 function(x) list(x$cyl,x$gear), mean) 即可。附加是不好的编程习惯,可能会在以后导致大问题。
    • with(mtcars, tapply(hp, list(cyl, gear), mean))
    【解决方案3】:

    (将我的评论移至回复,以便我更好地对其进行编辑。)

    我不知道如何使用 xtabs(我以前从未使用过)来做到这一点,但这里有几种使用 reshapeplyr 包的方法。

    > x = melt(mtcars, id = c("cyl", "gear"), measure = c("hp"))
    > cast(x, cyl ~ gear, mean)
    
    > x = ddply(mtcars, .(cyl, gear), summarise, hp = mean(hp))
    > cast(x, cyl ~ gear)
    

    【讨论】:

      【解决方案4】:

      另一种计算方法是使用 aggregate() 函数。虽然输出不是表格的形式。 (通过twitter

      > aggregate(hp~cyl+gear,data=mtcars,mean)
        cyl gear       hp
      1   4    3  97.0000
      2   6    3 107.5000
      3   8    3 194.1667
      4   4    4  76.0000
      5   6    4 116.5000
      6   4    5 102.0000
      7   6    5 175.0000
      8   8    5 299.5000
      > 
      

      【讨论】:

        猜你喜欢
        • 2017-12-05
        • 2021-09-02
        • 2023-03-14
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多