R mean() 函数 – 计算平均值(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在数据分析与统计学中,计算平均值是最基础且高频的操作之一。无论是处理实验数据、市场调研结果,还是分析用户行为日志,平均值都能帮助我们快速抓住数据的核心特征。在 R 语言中,mean() 函数作为内置函数,以其简洁的语法和强大的功能,成为实现这一需求的核心工具。

本文将从基础用法逐步深入,结合实际案例与代码示例,带领读者全面掌握 mean() 函数的使用场景、参数配置及常见问题解决方案。无论你是编程新手还是希望优化代码效率的开发者,都能从中获得实用的知识与技巧。


一、基础用法:快速计算向量平均值

1.1 向量平均值的计算

mean() 函数最基本的功能是计算数值型向量的平均值。其语法结构简单:

mean(x, trim = 0, na.rm = FALSE)  

其中:

  • x:输入的数值型向量或数组。
  • trim:默认为 0,表示计算完整平均值;若设置为 0.1,则会忽略排序后前 10% 和后 10% 的数据,计算剩余数据的平均值。
  • na.rm:是否自动删除缺失值(NA)。

示例 1:计算简单平均值

numbers <- c(10, 20, 30, 40, 50)  
mean_value <- mean(numbers)  
print(mean_value)  # 输出 30  

比喻理解
想象你有 5 个装满苹果的篮子,每个篮子里的苹果数量分别是 10、20、30、40、50。mean() 函数就像一个“公平的分发员”,把所有苹果总数除以篮子数量,告诉你平均每个篮子有多少苹果。

1.2 处理缺失值(NA)

当数据中存在缺失值时,mean() 默认会返回 NA。此时需通过 na.rm = TRUE 参数忽略缺失值:

numbers_with_na <- c(10, 20, NA, 40, 50)  
mean_na_rm <- mean(numbers_with_na, na.rm = TRUE)  
print(mean_na_rm)  # 输出 27.5(总和 120 ÷ 4)  

二、进阶应用:多维数据与加权平均

2.1 计算矩阵或数据框的列平均值

对于矩阵或数据框,mean() 默认计算所有数值的平均值。若需按列或按行计算,需结合 apply() 函数:

示例 2:矩阵的列平均值

matrix_data <- matrix(c(1, 2, 3, 4, 5, NA, 7, 8, 9), nrow = 3)  
print(matrix_data)  

column_means <- apply(matrix_data, MARGIN = 2, mean, na.rm = TRUE)  
print(column_means)  

MARGIN 参数说明

  • MARGIN = 1 表示按行计算
  • MARGIN = 2 表示按列计算

2.2 加权平均值的计算

mean() 函数本身不直接支持加权平均,但可通过手动计算实现:

scores <- c(80, 90, 75, 85)  
weights <- c(0.2, 0.3, 0.25, 0.25)  # 权重总和需为 1  

weighted_mean <- sum(scores * weights)  
print(weighted_mean)  # 输出 83.25  

三、实际案例:分析销售数据

3.1 数据准备

假设我们有一个包含产品销量的向量:

sales <- c(200, 250, 300, 350, 400, 450, 500, 550, 600, 650)  

3.2 基础分析

avg_sales <- mean(sales)  
print(paste("总平均销量:", avg_sales, "件"))  # 输出 425 件  

trimmed_avg <- mean(sales, trim = 0.2)  
print(paste("排除 20% 极端值后的平均:", trimmed_avg))  # 输出 450 件  

3.3 处理缺失值的进阶场景

假设第 5 个月的数据丢失:

sales_with_na <- c(200, 250, 300, 350, NA, 450, 500, 550, 600, 650)  
valid_avg <- mean(sales_with_na, na.rm = TRUE)  
print(valid_avg)  # 输出 437.5 件  

四、常见问题与解决方案

4.1 为什么得到 NANaN

  • 问题 1:数据中存在 NA 且未设置 na.rm = TRUE
    解决方法:添加参数 na.rm = TRUE,或先用 na.omit() 清理数据。
  • 问题 2:输入非数值型数据(如字符或逻辑值)。
    解决方法:确保输入数据为数值型,可通过 as.numeric() 转换。

4.2 如何计算分组数据的平均值?

对于数据框中的分组数据,可结合 dplyr 包的 group_by()summarise()

library(dplyr)  
df <- data.frame(  
  Category = c("A", "A", "B", "B", "C"),  
  Value = c(10, 20, 15, 25, 30)  
)  

grouped_mean <- df %>%  
  group_by(Category) %>%  
  summarise(Average = mean(Value))  
print(grouped_mean)  

输出结果:

  Category Average  
  <chr>     <dbl>  
1 A          15  
2 B          20  
3 C          30  

五、性能优化与替代方案

5.1 大数据集的高效计算

当数据规模较大时,mean() 的性能通常已足够高效。但若需进一步优化,可考虑:

  • 使用 data.table 包的 mean() 方法。
  • 避免不必要的中间变量,直接在管道中计算。

5.2 替代函数:weighted.mean()

若需直接计算加权平均,推荐使用 weighted.mean() 函数:

weighted_mean(scores, weights)  # 输出 83.25  

结论

R mean() 函数 – 计算平均值 是数据分析的基石工具,其简洁性与灵活性使其适用于从基础统计到复杂场景的各类任务。通过本文的讲解,读者应能掌握以下核心能力:

  1. 快速计算向量、矩阵及数据框的平均值。
  2. 处理缺失值与极端值的影响。
  3. 应用加权平均与分组分析。

无论是初学者还是中级开发者,建议通过实际数据集反复练习,逐步深入理解统计函数的底层逻辑。随着经验积累,你将发现 mean() 函数不仅是数值计算的“起点”,更是构建复杂分析流程的重要基石。

延伸思考:尝试将 mean() 与其他函数(如 sd() 标准差、median() 中位数)结合,探索数据的分布特征与异常检测方法!

最新发布