Skip to main content

R 语言 Quantile()函数简易指南

作者 Prajwal CN

R 中的 quantile()函数可以用来生成样本分位数。今天我们就将研究如何使用quantile()函数来寻找数值的分位数。 通俗地讲,分位数能够将样本分成相等的组或大小。在分位数中,第25个百分位数被称为下四分位数,第50个百分位数被称为中位数,第75个百分位数被称为上四分位数。 在下面的章节中,我们将探讨 quantile()函数是如何在 R 中运作的。

Quantile()函数语法

Quantile()函数在 R 中的语法是:

quantile(x, probs = , na.rm = FALSE)

其中

  • X = 输入的向量或数值
  • Probs = 0到1之间的值的概率
  • na.rm = 移除 NA 值

R 语言中 quantile()函数的一个简单实现

希望你已经弄清楚了该函数的定义和解释。现在,让我们借助一个简单的例子来看看 quantile()函数在R中是如何运作的。以下程序将返回输入数据的分位数。

#创建一个有一些值的向量, quantile()函数将返回数据的百分位数。

df<-c(12,3,4,56,78,18,46,78,100)
quantile(df)

输出:

0%   25%   50%   75%   100%
3 12 46 78 100

在上面的例子中,你可以看到 quantile()函数首先将输入值按升序排列,然后返回所需的百分位数。 注意:quantile()函数将数据分成相等的两半,其中中位数作为中间部分,之后,剩余数据的下半部分(数值小的部分)为下四分位数,上半部分为上四分位数。

处理缺失值 - NaN

NaN 无处不在。在这个由数据驱动的数字世界中,你可能会十分频繁地遇到NaN,它们通常被称为缺失值。无论你的数据为何有这些缺失值,都可能导致输出中出现 NaN,或者输出中出现错误。 因此,为了处理这些缺失值,我们将使用 na.rm 函数。这个函数将从我们的数据中删除 NA 值,并返回真正的值。 让我们看看这个函数效果如何:

#创建一个带有值和 NaN 的向量

df<-c(12,3,4,56,78,18,NA,46,78,100,NA)
quantile(df)

输出:

Error in quantile.default(df) :
missing values and NaN's not allowed if 'na.rm' is FALSE

看,我们得到了一个错误。如果你猜这跟 NA 值有关,那么答对了。如果我们的数据中存在 NA 值,那么大多数函数最终会返回这个 NA 值,或返回上述的错误信息。 那么,让我们用 na.rm 函数去除这些缺失值看看:

#创建一个带有值和 NaN 的向量

df<-c(12,3,4,56,78,18,NA,46,78,100,NA)

#去掉 NA 值并返回百分位数
quantile(df,na.rm = TRUE)

输出:

0%  25%  50%  75%  100%
3 12 46 78 100

在上面的例子中,你可以看到 na.rm 函数和它对输出的影响。该函数将删除 NA 值,以避免出现错误输出。

quantile函数中的 Probs参数

在文章的第一节中,你可以看到语法中的 probs 参数。你可能想知道它是什么意思,有什么作用。事实上,probs参数被传递给 quantile函数,以获得特定的或自定义的百分位数。 看起来很复杂?别担心,我将把它分解成简单的术语。 只要你使用 quantile函数,它就会返回标准百分位数,如25、50和75百分位数。但是,如果你想要第47个百分位数或第88个百分位数呢? 有了参数 probs,你就可以在其中指定所需的百分位数来获得这些。 在看下面这个例子之前,你应该知道关于probs这个参数的一些要求。 probs(即概率参数)的值应该在0到1之间。 下面是一个用于说明的例子:

#创建一个带有值的向量

df<-c(12,3,4,56,78,18,NA,46,78,100,NA)

#返回第22和77个百分位数的分位数。
quantile(df,na.rm = T,probs = c(22,77))

输出:

Error in quantile.default(df, na.rm = T, probs = c(22, 77)) :
'probs' outside [0,1]

哎呀,发生了错误! 你明白发生了什么吗? 在 Probs语句中,probs参数中的值违反了“0到1”这一条件。probs参数应该位于0和1之间。 因此,我们必须将probs 22和77转换成0.22和0.77。现在的输入值就是在0和1之间了。希望你能够明白这个例子。

#创建一个带有值的向量
df<-c(12,3,4,56,78,18,NA,46,78,100,NA)

#返回输入值的第22和77个百分位数

quantile(df,na.rm = T,probs = c(0.22,0.77))

输出:

22%       77%
10.08 78.00

Unname函数及其用途

假设你希望代码只返回百分位数,不返回分割点。在这种情况下,可以使用 unname函数。 unname函数将删除标题或分割点(0%,25%,50%,75%,100%),只返回百分位数。 让我们看看它是如何产生效果的吧! #创建一个带有值的向量

df<-c(12,3,4,56,78,18,NA,46,78,100,NA) quantile(df,na.rm = T,probs = c(0.22,0.77))

#去掉分割点,只返回百分位数。 unname(quantile(df,na.rm = T,probs = c(0.22,0.77)))

输出:

10.08      78.00

现在你可以观察到,unname函数禁用或删除了分割点,只返回了百分位数。

Round函数及其使用

我们将使用 round函数对数值进行舍入。 来看看它的效果:

#创建一个带有值的向量
df<-c(12,3,4,56,78,18,NA,46,78,100,NA)
quantile(df,na.rm = T,probs = c(0.22,0.77))

#返回四舍五入后的值
unname(round(quantile(df,na.rm = T,probs = c(0.22,0.77))))

输出:

10   78

可以看到,输出的值被四舍五入到小数点后0位。

获取数据集中多个组/列的分位数

到目前为止,我们已经讨论了quantile函数,它的用途和用法,它的参数以及如何正确使用参数。 在本节中,我们将学习如何获得数据集中多个列的分位数。让我们开始吧! 我将使用“MTCars”数据集和“dplyr”库来进行演示。

#reads the data #读取数据
data("mtcars")
#returns the top few rows of the data #返回数据的前几行
head(mtcars)

#install required paclages #安装所需的软件包
install.packages('dplyr')
library(dplyr)

#using tapply, we can apply the function to multiple groups #通过使用tapply,我们可以将函数应用于多个组
do.call("rbind",tapply(mtcars$mpg, mtcars$gear, quantile))

输出:

    0%     25%    50%     75%    100%
3 10.4 14.5 15.5 18.400 21.5
4 17.8 21.0 22.8 28.075 33.9
5 15.0 15.8 19.7 26.000 30.4

] 在上述过程中,我们必须安装“dplyr”包,然后利用 tapply 和 rbind 函数来获得 mtcars 数据集的多个列。 我们在mtcars数据集中提取了多个列,如“mpg”和“gear”列。像这样,我们就可以计算出数据集中多个组的百分位数。

百分位数能够可视化吗?

我的回答是:“可以!”。对此最合适的图表是箱形图。让我以“iris”数据集为例,尝试将箱形图可视化,图上也会展示出百分位数。 让我们开始吧!

data(iris)
head(iris)
iris 数据集

这是 iris 数据集的前6个值。 让我们用名为“Summary”的函数来探索这些数据。

summary(iris)
应用结果

在上图中,你可以看到平均数、中位数、第25个百分位数(即下四分位数)、第75个百分位数(即上百分位数)以及最小和最大值。让我们用箱形图来绘制这些信息。 让我们开始吧!

#绘制一个带有标签的箱形图
boxplot(iris$Sepal.Length,main='The boxplot showing the percentiles',col='Orange',ylab='Values',xlab='Sepal Length',border = 'brown',horizontal = T)
箱型图

箱形图可以显示数据许多方面的信息。在下图中,我标注了箱形图所代表的特定数值。这将为你节省一些时间,并极大地促进理解。

从左到右分别为最小值、第25个百分位数、中位数、第75个百分位数、最大值

结语

这是一篇相对较长的文章。我尽力通过各种例子和插图,从多个维度解释和探索 R 中的 quantile()函数。它是数据分析中最有用的函数,因为它有效地揭示了关于给定数据的更多信息。 希望你能很好地理解 R 语言中的 quantile()函数的相关内容。祝你数据分析愉快!