跳至主要内容

R median() 函数:找到中位数

学习如何使用 R 的 median() 函数快速找到数据的中位数。了解处理缺失值以及按类别分组汇总的技巧。
· 4分钟 阅读

使用 AI 探索

在数据分析中,寻找中位数是基本功,尤其当您面对偏态分布或离群值时。

在 R 中,median() 函数提供了一种简单、内置的方法来计算一个非常重要(非参数!)的集中趋势度量。我将带您快速上手:

R 的 median() 有什么作用?

median() 函数会检查您的数值数据,并返回(众多定义之一的)中心值。

median(numeric_vector)

这里的 numeric_vector 指的是一个数值向量或类似对象,比如数据框中的一列。

使用 R median() 的简单示例

来看一个实际例子。假设您有一个小的数值向量:

sales_numbers <- c(3, 5, 8, 2, 7)

median(sales_numbers)

R 会自动排序这些数字 (2, 3, 5, 7, 8),然后返回 5。这就是正好位于中间的位置的值。

但如果您的向量包含偶数个元素呢?如下例所示:

quarterly_sales <- c(10, 4, 7, 2)

median(quarterly_sales)

此时,R 会将其排序为 (2, 4, 7, 10),然后对中间两个数字(4 和 7)取平均,得到 5.5。

如果数据集中数值个数为奇数,就直接选中间那个;若为偶数,median() 会计算中间两个数的平均值。

因此在幕后,median() 会帮您完成排序,这非常省心。

用 median() 处理 NA 值

随着数据集变大,遇到缺失值是很常见的。如果不加注意,它们会干扰您的计算。默认情况下,只要向量中存在缺失值,median() 就会返回 NA。(哪怕只有一个缺失值。)来看下面的示例:

monthly_sales <- c(6, 3, NA, 9)

median(monthly_sales)

请注意结果是 NA。要避开这个问题,可添加参数 na.rm = TRUE。这会告知 R 在计算中位数前先移除缺失值:

median(monthly_sales, na.rm = TRUE)

这次您会得到 6(剩余值(3、6 和 9)的中位数)。留意那些 NA,它们很容易潜入数据中,如果忘记处理,会影响您的分析。

在 R 中按组计算中位数

我们来试试新玩法:比较不同分组的中位数。

一个常见问题:W如果我们想查看各地区的收入中位数怎么办?与处理简单向量类似,R 也能轻松完成,但现在我们需要先对数据进行分组。

在基础 R 中,一个快捷方法是使用 tapply():

income_values <- c(40000, 50000, 45000, 35000, 60000, 30000)
region_labels <- c("East", "West", "West", "East", "East", "West")

tapply(income_values, region_labels, median)

这会分别计算每个地区的收入中位数。

如果您更喜欢使用 dplyr 包,也可以用更易读的管道语法实现相同结果:

library(dplyr)

income_data <- data.frame(income = income_values, region = region_labels)

income_data %>%
   group_by(region) %>%
   summarise(median_income = median(income))

该方法会生成一个整洁的汇总表,列出每个地区的收入中位数。

像这样按组汇总,在您想比较数据中不同类别的集中趋势时尤其有用。

在 R 中为数据框各列计算中位数

有时,您可能想一次性获得数据框每一列的中位数——也许是为了快速浏览数据集的中心值。这里我将使用 sapply()。

test_scores <- data.frame(math = c(1, 2, 3), science = c(7, 8, 9))

sapply(test_scores, median)

该命令会返回每一列的中位数,便于您一眼发现趋势或离群点。当您在探索新数据并需要快速概览时,这个技巧尤其好用。

注意事项

在结束之前,我们强调一些常见陷阱与最佳实践,确保使用 median() 一路顺畅:

  • 确认传递给 median() 的是数值型数据。如果传入因子或字符向量,R 会报错。

  • 若怀疑存在缺失数据,请记得使用 na.rm = TRUE。

  • 无需手动排序数据。median() 会在内部完成排序,直接传入向量即可。

总结

当数据集中存在会扭曲均值的离群值时,median() 函数是理解数据真实中心的好方法。它也足够灵活,能够处理缺失值或按组汇总等复杂情况。

接下来,如果您有兴趣,我还写了一篇关于 R mean() 函数 的短文,欢迎查阅。别忘了参加我们的 Exploratory Data Analysis in R 课程,系统构建重要且实用的工作技能。

Josef Waples

作者

Josef Waples

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

主题