计算数据集列的百分位数
Posted
技术标签:
【中文标题】计算数据集列的百分位数【英文标题】:Calculating percentile of dataset column 【发布时间】:2014-02-08 18:19:48 【问题描述】:给你一个快速的,最亲爱的 R 大师:
我正在做一个作业,在这个练习中,我被要求从infert
数据集(它是内置的)中获取基本统计信息,特别是其中一个列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
我必须找到列的中值、方差、偏度、标准差,这些都可以,直到我被要求找到“百分位数”列。
到目前为止,我还没有找到任何东西,也许我从希腊语(作业的语言)中翻译错了。它是“ποσοστημόρια”,谷歌翻译指出英文术语是“百分位数”。
关于找到infert$age
的那些“百分位数”的任何教程或想法?
【问题讨论】:
也许可以看到?quantile
?
@AnandaMahto 这看起来很基本,可以与其余练习的感觉相匹配。我想就是这样。您只是将我推入解决方案,谢谢:p
【参考方案1】:
如果您订购一个向量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
【讨论】:
【参考方案2】:quantile()
函数将完成您可能想要的大部分工作,但由于问题含糊不清,我将提供一个与quantile()
略有不同的替代答案。
ecdf(infert$age)(infert$age)
将生成一个与infert$age
长度相同的向量,给出每个观察值下方infert$age
的比例。您可以阅读ecdf
文档,但基本思想是ecdf()
将为您提供一个返回经验累积分布的函数。因此ecdf(X)(Y)
是 X 在 Y 中的点的累积分布值。如果您只想知道低于 30 的概率(因此样本中 30 的百分位数是多少),您可以说
ecdf(infert$age)(30)
这种方法与使用quantile()
函数的主要区别在于quantile()
要求您输入概率才能得出关卡,而这需要您输入关卡才能得出概率。
【讨论】:
【参考方案3】:使用 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】: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)
。
【讨论】:
【参考方案5】:您还可以使用 hmisc 包,它会为您提供以下百分位数:
0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95
只需使用 describe(table_ages)
【讨论】:
以上是关于计算数据集列的百分位数的主要内容,如果未能解决你的问题,请参考以下文章
如何计算列的每个值所在的百分位数? (Spark SQL)[重复]
python使用pandas中的groupby函数和agg函数计算每个分组数据的两个分位数(例如百分之10分位数和百分之90分位数)
Pandas .. 分位数函数是不是需要排序数据来计算百分位数?