跳至主要内容

R mean() 函数:从平均值入门

使用 R 内置的平均函数计算数值、逻辑和加权数据的平均值。了解如何处理缺失值,并将该函数应用于向量和数据框。
· 4分钟 阅读

使用 AI 探索

在 R 中对数值数据做汇总时,计算平均值往往是第一步。反正我通常也是先做这一步。 

当然,“average(平均)”不一定非指算术平均数,但在本文中我默认就是这个意思,因为我要演示如何使用 R 中的 mean() 函数——这是 R 为此目的提供的标准工具。 

mean() 在 R 中有什么作用?

mean() 函数会计算数值数据的算术平均数。也就是说,它将向量或列中的所有值相加,再除以值的总个数。由于 mean() 属于 base R,您无需加载额外的包。因此一打开 R 就可以直接使用。

mean() 函数语法

我们已经知道 mean() 的用途了,下面看下它的基本语法,便于您上手使用:

mean(x, na.rm = FALSE, ...) 
  • x:数值向量或对象。

  • na.rm:逻辑值。若为 TRUE,mean() 将忽略 NA 值。

接下来请注意,处理缺失数据以及与不同数据结构打交道会带来一些细微差别,留意这些点就好。 

在 R 中计算数值向量的平均值

最基本的用法大概就是计算一个向量的平均值: 

daily_temperatures <- c(72, 68, 75, 70, 69)
mean(daily_temperatures)

这段代码会返回 72、68、75、70 和 69 的平均值,即 70.8。

用 na.rm 处理 R 中的缺失值

真实数据集中常常会有缺失值。若数据中包含缺失项,mean() 按默认行为会返回 NA。如果您没预料到这一点,可能会被它绊住,所以我们才需要花点时间了解 na.rm 参数。

survey_scores <- c(82, 90, NA, 88, 85)
mean(survey_scores)

运行这段代码会返回 NA。要让 R 忽略缺失值,只需设置 na.rm = TRUE:

mean(survey_scores, na.rm = TRUE)

现在,mean() 只会用可用的数字来计算平均值。 

在 R 中将 mean() 用于数据框

让我们把它的用法扩展到数据框,数据框是 R 中常见的数据结构。若要计算某一列的平均值,只需用 $ 操作符引用该列:

student_scores <- data.frame(
  student_name = c("Amir", "Bianca", "Carlos"),
  math_score = c(92, 85, 88)
)

mean(student_scores$math_score)

这会计算数据框中所有学生的平均分。您可以将这种方法应用于任意数值列(前提是它确实是数值列)。

R 中逻辑值的平均

到目前为止我们一直在讨论数值数据,但您可能会惊讶地发现,mean() 也能作用于逻辑向量。这是我之前略过的一个小但重要的细节。

之所以可以对逻辑值使用 mean(),是因为在 R 中,TRUE 被视为 1,FALSE 被视为 0,因此对逻辑向量取平均会返回 TRUE 值所占的比例。如果您需要汇总二元结果,这会很有用。

quiz_passed_flags <- c(TRUE, FALSE, TRUE, TRUE)
mean(quiz_passed_flags)

这里的结果是 0.75,因为 4 个值中有 3 个为 TRUE。

在 R 中求加权平均 

有时您需要加权平均,因为不同的值对结果的贡献不相等。此时可以使用 weighted.mean():

course_grades <- c(88, 92, 75)
assignment_weights <- c(0.3, 0.4, 0.3)

weighted.mean(course_grades, assignment_weights)

通过使用 weighted.mean(),您可以考虑各个值的重要性或出现频率的差异。mean() 本身并不会做到这一点。

一些需要注意的事项

这些点前面大多已经提到过了,这里把可能的问题或提示集中列一下:

  • 非数值数据:如果向量或列不是数值或逻辑类型,mean() 会报错。

  • NA 处理:在有缺失数据时忘记使用 na.rm = TRUE,每次都会让您栽跟头。

  • 空向量:mean(numeric(0)) 会返回 NA 并给出警告。

R 中的相似函数

R 还提供了若干相关函数,帮助您从不同角度探索数据。这些也都在 base R 中,因此无需导入库即可使用。 

  • median():用于计算中位数

  • sd():用于计算标准差

  • sum():用于求和

如果您想进一步了解不同集中趋势度量的重要性,请查看我们非常完整的教程:均值 vs. 中位数:了解差异。

结论

在大多数基础的数据分析任务中,mean() 是您汇总数值时的第一站。

继续通过我们的课程学习,例如 Introduction to R 和 Exploratory Data Analysis in R。

Josef Waples

作者

Josef Waples

我是数据科学编辑,曾为科学期刊发表的研究论文撰稿。我的兴趣领域包括线性代数、统计学、R 等相关主题。

主题