R - 均值、中位数和众数

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

R - Mean, Median & Mode

均值

让我们从均值开始,这可能是最常见的集中趋势度量。简单来说,它就是我们通常所说的“平均数”。

基础均值计算

在R中计算均值,我们使用mean()函数。以下是一个简单示例:

numbers <- c(10, 20, 30, 40, 50)
result <- mean(numbers)
print(result)

这将输出:30

让我们分解一下:

  1. 我们使用c()函数创建了一个名为numbers的向量。
  2. 我们使用mean()函数计算这些数字的平均值。
  3. 我们将结果存储在一个名为result的变量中。
  4. 最后,我们打印出结果。

带有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

让我们分解一下这个自定义函数:

  1. unique(v)获取向量中的唯一值。
  2. match(v, uniqv)找出匹配的位置。
  3. tabulate()计算出现次数。
  4. which.max()找出最大计数的位置。
  5. 我们返回该位置的值。

函数总结

下面是一个我们学过的函数的便捷表格:

度量 函数 选项
均值 mean() na.rm, trim
中位数 median() na.rm
众数 自定义函数 N/A

记住,熟能生巧!尝试将这些函数应用于不同的数据集,并探索改变选项如何影响结果。

在我们结束之前,我想起了一个我早期学习R时的故事。我曾经花了好几个小时尝试计算一个数据集的均值,最后才意识到我忘记了移除NA值。不要像我一样——总是检查你的数据,并在需要时使用na.rm = TRUE

快乐编码,愿你在R语言的统计冒险中充满洞见和惊喜时刻!

Credits: Image by storyset