R中的Quantile()函数

时间:2020-02-23 14:43:43  来源:igfitidea点击:

您可以使用R中的Quantile()函数生成示例分位数。

大家好,今天我们将研究如何使用Quantile()函数查找值的分位数。

分位数:用外行术语来说,分位数不过是将示例分为相等的组或者大小。
由于这种性质,分位数也称为分形。
在分位数中,第25个百分位数称为下四分位数,第50个百分位数称为中位数,第75个百分位数称为较高四分位数。

在以下各节中,让我们看一下Quantile()函数在R中的工作方式。

Quantile()函数语法

R中的Quantile()函数的语法为:

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

其中:

  • X =输入向量或者值

  • 概率= 0到1之间的值的概率。

  • na.rm =删除NA值。

R中Quantile()函数的简单实现

好吧,希望您对分位数功能的定义和解释感到满意。
现在,借助一个简单的示例返回R的分位数功能,该示例返回输入数据的分位数。

#creates a vector having some values and the quantile function will return the percentiles for the data.

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

输出:

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

在上面的示例中,您可以观察到分位数功能首先按升序排列输入值,然后返回所需的值的百分位。

注意:分位数功能将数据分为相等的两半,其中中位数为中间,其余部分的下半部分为下四分位数,而上半部分为上四分位数。

处理遗漏的值-" NaN"

NaN无处不在。
在这个由数据驱动的数字世界中,您可能会更频繁地遇到这些NaN,这通常被称为缺失值。
如果您的数据无论如何都缺少这些值,则最终可能会在输出中获得NaN或者在输出中出现错误。

因此,为了处理这些缺失的值,我们将使用na.rm函数。
此函数将从我们的数据中删除NA值并返回真实值。

让我们看看它是如何工作的。

#creates a vector having values along with NaN's

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函数删除这些缺失的值。

#creates a vector having values along with NaN's

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

#removes the NA values and returns the percentiles
quantile(df,na.rm = TRUE)

输出:

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

在上面的示例中,您可以看到na.rm函数及其对输出的影响。
该功能将删除NA,以避免错误的输出。

分位数中的"概率"参数

正如您在文章的第一部分中看到的语法中的probs参数所看到的那样,您可能想知道它的含义以及它的工作原理?好吧,将probs参数传递给分位数函数以获取特定或者自定义百分位数。

似乎很复杂?不用担心,我将其分解为简单的术语。

好吧,无论何时使用函数分位数,它都会返回标准百分位数,例如25,50和75百分位数。
但是,如果您想要47%或者88%的百分比呢?

参数"概率"出现了,您可以其中指定所需的百分位数来获得这些概率。

在进行示例之前,您应该不了解有关概率的知识。

概率:概率或者概率参数应介于0和1之间。

这是说明上述语句的示例。

#creates the vector of values

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

#returns the quantile of 22 and 77 th percentiles. 
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之间的值。

因此,我们必须将概率22和77转换为0.22和0.77。
现在输入值在0到1之间吧?我希望这是有道理的。

#creates a vector of values
df<-c(12,3,4,56,78,18,NA,46,78,100,NA)

#returns the 22 and 77th percentiles of the input values
quantile(df,na.rm = T,probs = c(0.22,0.77))

输出:

22%       77% 
10.08     78.00 

"取消命名"功能及其用途

假设您希望代码仅返回百分位数,并避免出现切点。
在这种情况下,您可以使用"取消命名"功能。

"取消命名"功能将删除标题或者剪切点(0%,25%,50%,75%,100%),仅返回百分位。

让我们看看它是如何工作的!

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

#avoids the cut-points and returns only the percentiles.
unname(quantile(df,na.rm = T,probs = c(0.22,0.77)))

输出:

10.08      78.00

现在,您可以观察到切点已被unname函数禁用或者删除,并且仅返回百分位数。

"回合"功能及其用途

过去的文章中,我们已经详细讨论了R中的round函数。
现在,我们将使用round函数舍入值。

让我们看看它是如何工作的!

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

#returns the round off values
unname(round(quantile(df,na.rm = T,probs = c(0.22,0.77))))

输出:

10   78

如您所见,我们的输出值四舍五入到小数点后零位。

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

到目前为止,我们已经讨论了分位数功能,其用途和应用以及其参数以及如何正确使用它们。

在本节中,我们将获取数据集中多个列的分位数。
听起来不错?跟着我!

为此,我将使用" 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
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"列。
这样,我们可以计算数据集中多个组的分位数。

我们可以可视化百分位数吗?

我的回答是肯定的!最好的绘图是箱形图。
让我以虹膜数据集为例,尝试使方框图可视化,该方框图还将显示百分位数。

来吧!

data(iris)
head(iris)

这是虹膜数据集的前6个值。

让我们使用名为"摘要"的功能探索数据。

summary(iris)

在上图中,您可以看到平均值,中位数,第25个百分位数(第1个四分位数),第75个百分位数(第3个百分位数)以及最小值和最大值。
让我们通过箱形图来绘制这些信息。

我们开始做吧!

#plots a boxplot with labels

boxplot(iris$Sepal.Length,main='The boxplot showing the percentiles',col='Orange',ylab='Values',xlab='Sepal Length',border = 'brown',horizontal = T) 

箱形图可以显示数据的许多方面。
在下图中,我提到了由箱形图表示的特定值。
这将为您节省一些时间,并以最好的方式促进您的理解。