在数据分析中,寻找中位数是基本功,尤其当您面对偏态分布或离群值时。
在 R 中,median() 函数提供了一种简单、内置的方法来计算一个非常重要(非参数!)的集中趋势度量。我将带您快速上手:
median() 函数会检查您的数值数据,并返回(众多定义之一的)中心值。
median(numeric_vector)技术支持
这里的 numeric_vector 指的是一个数值向量或类似对象,比如数据框中的一列。
来看一个实际例子。假设您有一个小的数值向量:
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。(哪怕只有一个缺失值。)来看下面的示例:
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 课程,系统构建重要且实用的工作技能。
在数据分析中,寻找中位数是基本功,尤其当您面对偏态分布或离群值时。
在 R 中,
median()函数提供了一种简单、内置的方法来计算一个非常重要(非参数!)的集中趋势度量。我将带您快速上手:R 的 median() 有什么作用?
median()函数会检查您的数值数据,并返回(众多定义之一的)中心值。这里的
numeric_vector指的是一个数值向量或类似对象,比如数据框中的一列。使用 R median() 的简单示例
来看一个实际例子。假设您有一个小的数值向量:
R 会自动排序这些数字
(2, 3, 5, 7, 8),然后返回5。这就是正好位于中间的位置的值。但如果您的向量包含偶数个元素呢?如下例所示:
此时,R 会将其排序为
(2, 4, 7, 10),然后对中间两个数字(4和7)取平均,得到5.5。如果数据集中数值个数为奇数,就直接选中间那个;若为偶数,
median()会计算中间两个数的平均值。因此在幕后,
median()会帮您完成排序,这非常省心。用 median() 处理 NA 值
随着数据集变大,遇到缺失值是很常见的。如果不加注意,它们会干扰您的计算。默认情况下,只要向量中存在缺失值,
median()就会返回NA。(哪怕只有一个缺失值。)来看下面的示例:请注意结果是
NA。要避开这个问题,可添加参数na.rm = TRUE。这会告知 R 在计算中位数前先移除缺失值:这次您会得到
6(剩余值(3、6和9)的中位数)。留意那些 NA,它们很容易潜入数据中,如果忘记处理,会影响您的分析。在 R 中按组计算中位数
我们来试试新玩法:比较不同分组的中位数。
一个常见问题:W如果我们想查看各地区的收入中位数怎么办?与处理简单向量类似,R 也能轻松完成,但现在我们需要先对数据进行分组。
在基础 R 中,一个快捷方法是使用
tapply():这会分别计算每个地区的收入中位数。
如果您更喜欢使用
dplyr包,也可以用更易读的管道语法实现相同结果:该方法会生成一个整洁的汇总表,列出每个地区的收入中位数。
像这样按组汇总,在您想比较数据中不同类别的集中趋势时尤其有用。
在 R 中为数据框各列计算中位数
有时,您可能想一次性获得数据框每一列的中位数——也许是为了快速浏览数据集的中心值。这里我将使用
sapply()。该命令会返回每一列的中位数,便于您一眼发现趋势或离群点。当您在探索新数据并需要快速概览时,这个技巧尤其好用。
注意事项
在结束之前,我们强调一些常见陷阱与最佳实践,确保使用
median()一路顺畅:确认传递给
median()的是数值型数据。如果传入因子或字符向量,R 会报错。若怀疑存在缺失数据,请记得使用
na.rm = TRUE。无需手动排序数据。
median()会在内部完成排序,直接传入向量即可。总结
当数据集中存在会扭曲均值的离群值时,
median()函数是理解数据真实中心的好方法。它也足够灵活,能够处理缺失值或按组汇总等复杂情况。接下来,如果您有兴趣,我还写了一篇关于 R mean() 函数 的短文,欢迎查阅。别忘了参加我们的 Exploratory Data Analysis in R 课程,系统构建重要且实用的工作技能。