R mean() 函数 – 计算平均值:从入门到实战
在数据分析的世界里,平均值就像一条看不见的“中心线”,它告诉你一组数据的“典型水平”。无论是统计学、金融分析,还是机器学习,计算平均值都是最基础也最重要的操作之一。而在 R 语言中,mean() 函数就是完成这项任务的核心工具。今天,我们就来深入聊聊这个看似简单、实则强大的 R mean() 函数 – 计算平均值。
你可能已经用过 Excel 的 AVERAGE 函数,R 中的 mean() 与之功能完全一致,但更灵活、更强大。它不仅能处理数字向量,还能配合数据框、矩阵,甚至处理缺失值,是每位 R 用户必须掌握的“标配技能”。
什么是 R mean() 函数?
mean() 是 R 语言内置的一个基础函数,用于计算一组数值的算术平均值。它的核心逻辑非常直观:把所有数值加起来,再除以数值的个数。
📌 举个生活中的例子:
假设你连续 5 天记录了每天的步数:10000、12000、9000、11000、13000。
那么你的平均每日步数就是:(10000 + 12000 + 9000 + 11000 + 13000) / 5 = 11000 步。
这个“除以个数”的过程,就是mean()函数在做的事。
在 R 中,你只需要一行代码就能完成这个计算:
steps <- c(10000, 12000, 9000, 11000, 13000)
mean(steps)
输出结果:
[1] 11000
这段代码中:
c()是 R 中创建向量的函数,c(10000, 12000, ...)把多个数字组合成一个“数据列”;mean(steps)调用函数,计算这个向量的平均值;- R 会自动把所有值相加,再除以长度(5),返回结果。
基本用法:计算简单向量的平均值
最常见的情况是处理一个数字向量。我们来练习几个典型场景。
scores <- c(88, 92, 76, 85, 90, 83, 89)
average_score <- mean(scores)
average_score
输出结果:
[1] 86.57143
中文注释说明:
scores向量包含 7 个数值,代表 7 位同学的考试分数;mean(scores)自动计算这 7 个数的总和除以 7;- 结果约为 86.57,表示这组成绩的平均水平。
💡 小贴士:R 的
mean()函数默认会自动忽略NA值(缺失值),但如果你不希望它自动忽略,可以设置参数na.rm = FALSE,这时如果数据中包含NA,函数会直接返回NA。
处理缺失值:na.rm 参数详解
现实中的数据很少“完美无瑕”。比如,某位同学没参加考试,成绩记录为 NA。这时,mean() 会如何处理?
scores_with_na <- c(88, 92, NA, 85, 90, 83, 89)
mean(scores_with_na)
输出结果:
[1] NA
这说明:默认情况下,mean() 会把 NA 当作“不可计算”的数据,导致整个平均值无法得出。
但我们可以用 na.rm = TRUE 参数来“清理”缺失值:
mean(scores_with_na, na.rm = TRUE)
输出结果:
[1] 87.2
中文注释说明:
na.rm = TRUE表示“移除缺失值”(remove NA);- R 会先过滤掉
NA,只保留有效数字(88, 92, 85, 90, 83, 89); - 然后计算这 6 个数的平均值,结果为 87.2。
✅ 建议:在真实项目中,几乎总是使用
na.rm = TRUE,除非你明确想检测数据中是否含有缺失值。
在数据框中使用 mean():按列计算平均值
在实际工作中,数据通常以“表格”形式存在,比如数据框(data.frame)。我们来看一个典型例子:班级学生的各科成绩。
students <- data.frame(
name = c("张三", "李四", "王五", "赵六"),
chinese = c(85, 90, 78, 88),
math = c(92, 87, 95, 89),
english = c(80, 85, 88, 91)
)
print(students)
输出结果:
name chinese math english
1 张三 85 92 80
2 李四 90 87 85
3 王五 78 95 88
4 赵六 88 89 91
现在我们想分别计算每门课的平均分。可以这样操作:
mean(students$chinese)
mean(students$math)
mean(students$english)
输出结果:
[1] 85.25
[1] 90.5
[1] 86
中文注释说明:
students$chinese表示从数据框中提取“语文”这一列;mean()对该列的数值进行平均计算;- 每个
mean()调用都独立运行,返回对应科目的平均分。
批量计算:结合 sapply 实现多列平均值
如果你有 10 门课,手动写 10 次 mean() 显得低效。这时可以使用 sapply() 函数,对多列统一处理。
column_averages <- sapply(students[, 2:4], mean)
column_averages
输出结果:
chinese math english
85.25 90.50 86.00
中文注释说明:
students[, 2:4]表示选取第 2 到第 4 列(即语文、数学、英语);sapply()会逐列调用mean()函数;- 最终返回一个命名向量,键是列名,值是平均值。
✅ 这种方式特别适合处理包含多个数值变量的数据框,是数据分析师的常用技巧。
深入理解:mean() 的内部机制与限制
虽然 mean() 看似简单,但它背后有几个关键点值得了解。
1. 只接受数值型数据
mean() 不能处理字符型或逻辑型数据。试试看:
text_data <- c("A", "B", "C")
mean(text_data) # 报错!
错误提示:
错误 in mean(text_data): 无效的 'type' (character) 为 'mean'
✅ 原因:R 无法把字母“ABC”加起来,平均值在语义上不成立。
2. 会自动转换逻辑型为数值型
有趣的是,R 会把逻辑值 TRUE 和 FALSE 当作 1 和 0 来处理。
pass_status <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
pass_rate <- mean(pass_status)
pass_rate
输出结果:
[1] 0.6
中文注释说明:
TRUE→ 1,FALSE→ 0;- 5 个值中 3 个是
TRUE,所以总和是 3,除以 5 得 0.6; - 这意味着 60% 的人通过,这正是用
mean()计算“通过率”的经典用法。
实战案例:分析销售数据的平均销售额
我们来做一个完整的实战项目:分析某公司 12 个月的销售额,找出平均月销售额,并判断是否达标。
sales <- c(120, 135, 110, 145, 150, 160, 175, 180, 170, 165, 155, 140)
average_sales <- mean(sales)
average_sales
输出结果:
[1] 150.4167
中文注释说明:
- 12 个月的总销售额为 1805 万元;
- 平均每月销售额为 150.42 万元;
- 这个数字可以作为“目标基准”来对比每月表现。
✅ 进阶:你可以进一步用
mean()与sd()(标准差)结合,判断销售额波动是否剧烈。
总结:R mean() 函数 – 计算平均值 的核心价值
R mean() 函数 – 计算平均值 不仅是一个基础函数,更是数据分析的“第一道门槛”。它简洁、高效、灵活,支持缺失值处理、数据框操作和逻辑值转换,是 R 语言中不可或缺的工具。
无论你是初学者还是中级开发者,掌握 mean() 的用法,意味着你已经迈出了数据探索的第一步。记住几个关键点:
- 用
na.rm = TRUE避免因缺失值导致计算失败; - 用
dataframe$column提取列数据; - 用
sapply()批量计算多列平均值; - 逻辑型数据可以用于计算通过率;
- 不能对字符型数据使用
mean()。
当你在处理真实数据时,mean() 会是你最常调用的函数之一。多练习、多应用,你会发现它不仅“会用”,还能“用好”。