如何计算 R 中的百分位数?
在本文中,我们将讨论如何在 R 编程语言中计算百分位数。
百分位数是集中趋势的度量,它描述了在总数据中,大约某个百分比的数据低于它。在 R 中,我们可以使用 quantile()函数来完成工作。
Syntax: quantile( data, probs)
Parameter:
- data: data whose percentiles are to be calculated
- probs: percentile value
示例 1:计算百分位数
要计算百分位数,我们只需传递数据和所需百分位数的值。
R
x<-c(2,13,5,36,12,50)
res<-quantile(x,probs=0.5)
res
R
x<-c(2,13,5,36,12,50)
res<-quantile(x,probs=c(0.5,0.75))
res
R
df<-data.frame(x=c(2,13,5,36,12,50),
y=c('a','b','c','c','c','b'))
res<-quantile(df$x,probs=c(0.35,0.7))
res
R
df<-data.frame(x=c(2,13,5,36,12,50),
y=c('a','b','c','c','c','b'),
z=c(2.1,6,3.8,4.8,2.2,1.1))
sub_df<-df[,c('x','z')]
res<-apply(sub_df, 2, function(x) quantile(x,probs=0.5))
res
R
library(dplyr)
df<-data.frame(x=c(2,13,5,36,12,50),
y=c('a','b','c','c','c','b'))
df %>% group_by(y) %>%
summarize(res=quantile(x,probs=0.5))
R
df<-data.frame(x=c(2,13,5,36,12,50),
y=c('a','b','c','c','c','b'),
z=c(2.1,6,3.8,4.8,2.2,1.1))
n<-length(df$x)
plot((1:n-1)/(n-1), sort(df$x.Length), type='h',
xlab = "Percentile",
ylab = "Value")
输出:
50%
12.5
示例 2:计算向量的百分位数
我们可以一次计算多个百分位数。为此,我们必须将百分位数向量而不是单个值传递给 probs 参数。
R
x<-c(2,13,5,36,12,50)
res<-quantile(x,probs=c(0.5,0.75))
res
输出:
50% 75%
12.50 30.25
示例 4:计算数据框中的百分位数
有时要求要求计算数据框列的百分位数,在这种情况下,整个过程保持不变,只有您必须传递列名代替数据以及要计算的百分位数值。
R
df<-data.frame(x=c(2,13,5,36,12,50),
y=c('a','b','c','c','c','b'))
res<-quantile(df$x,probs=c(0.35,0.7))
res
输出:
35% 70%
10.25 24.50
示例 5:多列和所有列的分位数
我们还可以一次找到几个数据框列的百分位数。这也可以用于查找数据框所有数字列的百分位数。为此,我们使用 apply()函数,在此我们将传递仅包含数字列的数据帧和必须应用于所有列的分位数函数。
Syntax: apply( dataframe, function)
R
df<-data.frame(x=c(2,13,5,36,12,50),
y=c('a','b','c','c','c','b'),
z=c(2.1,6,3.8,4.8,2.2,1.1))
sub_df<-df[,c('x','z')]
res<-apply(sub_df, 2, function(x) quantile(x,probs=0.5))
res
输出:
x z
12.5 3.0
示例 6:按组计算分位数
我们还可以将值组合在一起并找到每个组的百分位数。为此,我们使用 groupby()函数,然后在 summarise() 中应用分位数函数。
R
library(dplyr)
df<-data.frame(x=c(2,13,5,36,12,50),
y=c('a','b','c','c','c','b'))
df %>% group_by(y) %>%
summarize(res=quantile(x,probs=0.5))
输出:
A tibble: 3 x 2
y res
a 2
b 31.5
c 12
示例 7:可视化百分位数
可视化百分位数可以使其更好地理解。
R
df<-data.frame(x=c(2,13,5,36,12,50),
y=c('a','b','c','c','c','b'),
z=c(2.1,6,3.8,4.8,2.2,1.1))
n<-length(df$x)
plot((1:n-1)/(n-1), sort(df$x.Length), type='h',
xlab = "Percentile",
ylab = "Value")
输出: