【问题标题】:How to find the mean of a variable for every value of another variable?如何为另一个变量的每个值找到一个变量的平均值?
【发布时间】:2016-11-18 00:58:04
【问题描述】:

我是新来的,所以请原谅这样一个基本的问题,但我刚开始使用 R 并且有人问我一个让我难过的问题:

使用 R 中预先安装的数据集 mtcars,我应该为“gear”变量的每个值找到“mpg”变量的平均值。我不确定这意味着什么。我假设我需要使用子集?

它是如此基本,所以我有点沮丧,我不知道在这里做什么......

【问题讨论】:

  • 你可以试试看这里的教程:r-tutor.com/r-introduction/data-frame mtcars 是一个有行和列的对象。我还没有看到整个数据集,但mpg 是该数据集上的一列,我猜gear 也是数据集上的一列。

标签: r subset mean


【解决方案1】:

使用aggregate:

aggregate(mtcars$mpg,list(mtcars$gear),mean)
##  Group.1        x
##1       3 16.10667
##2       4 24.53333
##3       5 21.38000

根据文档,见?aggregate:

将数据拆分为子集,计算每个子集的汇总统计数据,并以方便的形式返回结果。

这里,第一个参数mtcars$mpg 是您要平均的变量,第二个参数是一个分组变量列表,每个变量的值确定x 的子集以应用函数mean ,这是第三个参数。

【讨论】:

  • 不错的答案,但使用公式界面aggregate(mpg ~ gear, mtcars, mean) 可能会更干净一些。
  • 这里的编码课程令人沮丧的事情之一是,它们教给我们最基本的知识,并向我们提出与我们尚未学习过的代码有关的问题。感谢您向我介绍聚合函数!大有帮助!
【解决方案2】:

或使用data.table

library(data.table)
as.data.table(mtcars)[, .(avg_mpg = mean(mpg)), by = gear]

【讨论】:

    【解决方案3】:

    使用dplyr:

    library(dplyr)
    mtcars %>%
      group_by(gear) %>%
      summarise(avg_mpg = mean(mpg))
    

    【讨论】:

      【解决方案4】:

      有时从可视化数据开始很有用:

      plot(x = mtcars$gear, y = mtcars$mpg)
      

      我们可以看到gear 有 3 个值(3、4 和 5),我们希望找到每个齿轮值的平均 mpg 值。

      我们可以按照您的建议通过子集来做到这一点:

      mean(subset(mtcars, gear == 3)$mpg)
      # [1] 16.10667
      

      但是使用base R 函数的一种方法是tapply:

      tapply(mtcars$mpg, mtcars$gear, mean)
      #        3        4        5 
      # 16.10667 24.53333 21.38000
      

      【讨论】:

        猜你喜欢
        • 2021-06-14
        • 2015-02-23
        • 1970-01-01
        • 2019-05-18
        • 2021-09-29
        • 2023-02-25
        • 2014-10-13
        • 2014-04-30
        • 1970-01-01
        相关资源
        最近更新 更多