计算数据集列的百分位数

时间:2014-01-19 16:33:39

标签: r statistics percentile

快速为您服务,最亲爱的R大师:

我正在做一项任务,在本练习中,我被要求从infert数据集(它是内置的)中获取基本统计数据,特别是其中一列,{{1 }}

对于不熟悉数据集的人:

infert$age

我必须找到列的中间值,方差,偏度,标准偏差都没关系,直到我被要求找到列“百分位数”

到目前为止,我还没有找到任何东西,也许我已经错误地从希腊语中翻译了它,这是作业的语言。这是“ποσοστημόρια”,谷歌翻译指出英文术语是“百分位数”。

有关找到> table_ages # Which is just subset(infert, select=c("age")); age 1 26 2 42 3 39 4 34 5 35 6 36 7 23 8 32 9 21 10 28 11 29 ... 246 35 247 29 248 23

的“百分位数”的任何教程或想法

5 个答案:

答案 0 :(得分:45)

如果您订购了一个向量x,并找到了向量中间值,那么您只需找到一个中位数或第50百分位数。任何百分比都适用相同的逻辑。这是两个例子。

x <- rnorm(100)
quantile(x, probs = c(0, 0.25, 0.5, 0.75, 1)) # quartile
quantile(x, probs = seq(0, 1, by= 0.1)) # decile

答案 1 :(得分:21)

quantile()函数会完成您可能需要的功能,但由于问题含糊不清,我将提供一个与quantile()略有不同的替代答案。

ecdf(infert$age)(infert$age)

将生成与infert$age长度相同的向量,得出低于每个观察值的infert$age比例。您可以阅读ecdf文档,但基本思路是ecdf()将为您提供返回经验累积分布的函数。因此ecdf(X)(Y)是Y在Y点的累积分布的值。如果你想知道低于30的概率(因此样本中的百分位数是30),你可以说

ecdf(infert$age)(30)

这种方法与使用quantile()函数之间的主要区别在于quantile()要求您输入概率以获得级别,这需要您输入级别才能退出概率。

答案 2 :(得分:4)

table_ages <- subset(infert, select=c("age"))
summary(table_ages)
#            age       
#  Min.   :21.00  
#  1st Qu.:28.00  
#  Median :31.00  
#  Mean   :31.50  
#  3rd Qu.:35.25  
#  Max.   :44.00  

这可能是他们正在寻找的东西。 summary(...)应用于数字会返回数据的最小值,最大值,平均值,中位数以及第25和第75百分位数。

请注意

summary(infert$age)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#   21.00   28.00   31.00   31.50   35.25   44.00 

数字相同但格式不同。这是因为table_ages是一列(年龄)的数据框,而infert$age是数字向量。尝试输入summary(infert)

答案 3 :(得分:1)

使用{dplyr}:

library(dplyr)

# percentiles
infert %>% 
  mutate(PCT = ntile(age, 100))

# quartiles
infert %>% 
  mutate(PCT = ntile(age, 4))

# deciles
infert %>% 
  mutate(PCT = ntile(age, 10))

答案 4 :(得分:0)

你也可以使用hmisc包来提供以下百分位数:

0.05,0.1,0.25,0.5,0.75,0.9,0.95 p

只需使用describe(table_ages)

即可