R - 均值、中位数和众数
你好,有抱负的R语言程序员们!今天,我们将使用R语言深入探索描述性统计学的世界。作为你友好的人工智能助手,我将引导你了解均值、中位数和众数的概念。如果你之前从未编写过一行代码,也不用担心——我们将从最基础的内容开始,一起逐步学习。

均值
让我们从均值开始,这可能是最常见的集中趋势度量。简单来说,它就是我们通常所说的“平均数”。
基础均值计算
在R中计算均值,我们使用mean()函数。以下是一个简单示例:
numbers <- c(10, 20, 30, 40, 50)
result <- mean(numbers)
print(result)这将输出:30
让我们分解一下:
- 我们使用c()函数创建了一个名为numbers的向量。
- 我们使用mean()函数计算这些数字的平均值。
- 我们将结果存储在一个名为result的变量中。
- 最后,我们打印出结果。
带有NA值的均值
现在,如果我们有缺失数据,R中用NA表示,会发生什么?让我们看看:
numbers_with_na <- c(10, 20, NA, 40, 50)
result_with_na <- mean(numbers_with_na)
print(result_with_na)这将输出:NA
哦哦!R返回NA,因为它不知道如何处理缺失值。但别担心,我们有解决方案!
应用NA选项
我们可以使用na.rm选项让R忽略NA值:
numbers_with_na <- c(10, 20, NA, 40, 50)
result_na_removed <- mean(numbers_with_na, na.rm = TRUE)
print(result_na_removed)这将输出:30
好多了!通过设置na.rm = TRUE,我们在计算均值之前告诉R移除NA值。
应用Trim选项
有时,我们希望在计算均值时排除极端值。这时,trim选项就派上用场了。它允许我们在计算均值之前从数据两端修剪一定百分比的值。
numbers <- c(1, 2, 3, 4, 5, 100)  # 注意这里的异常值100
result_trimmed <- mean(numbers, trim = 0.1)
print(result_trimmed)这将输出一个接近3.5的值
通过设置trim = 0.1,我们在计算均值之前从两端移除了10%的数据。这有助于减少异常值的影响。
中位数
中位数是将数据集按大小顺序排列后的中间值。它受异常值的影响小于均值。
numbers <- c(1, 3, 5, 7, 9, 11, 13)
result_median <- median(numbers)
print(result_median)这将输出:7
median()函数的工作方式与mean()类似。它也有一个na.rm选项来处理NA值:
numbers_with_na <- c(1, 3, NA, 7, 9, 11, 13)
result_median_na <- median(numbers_with_na, na.rm = TRUE)
print(result_median_na)这将输出:8
众数
有趣的是,R没有内置的众数(最频繁出现的值)函数。但别担心!我们可以创建自己的函数:
get_mode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
numbers <- c(1, 2, 2, 3, 3, 3, 4, 4, 5)
result_mode <- get_mode(numbers)
print(result_mode)这将输出:3
让我们分解一下这个自定义函数:
- 
unique(v)获取向量中的唯一值。
- 
match(v, uniqv)找出匹配的位置。
- 
tabulate()计算出现次数。
- 
which.max()找出最大计数的位置。
- 我们返回该位置的值。
函数总结
下面是一个我们学过的函数的便捷表格:
| 度量 | 函数 | 选项 | 
|---|---|---|
| 均值 | mean() | na.rm, trim | 
| 中位数 | median() | na.rm | 
| 众数 | 自定义函数 | N/A | 
记住,熟能生巧!尝试将这些函数应用于不同的数据集,并探索改变选项如何影响结果。
在我们结束之前,我想起了一个我早期学习R时的故事。我曾经花了好几个小时尝试计算一个数据集的均值,最后才意识到我忘记了移除NA值。不要像我一样——总是检查你的数据,并在需要时使用na.rm = TRUE!
快乐编码,愿你在R语言的统计冒险中充满洞见和惊喜时刻!
Credits: Image by storyset
