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 数据集的前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)

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

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