49

给你一个快速的,最亲爱的 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

我必须找到列的中值、方差、偏度、标准差,这些都可以,直到我被要求找到 "percentiles" 列

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

关于找到那些“百分位数”的任何教程或想法infert$age

4

5 回答 5

71

如果您订购一个向量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
于 2014-01-19T17:05:12.157 回答
36

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()需要您输入概率才能得出关卡,而这需要您输入关卡才能得出概率。

于 2015-05-23T23:55:39.193 回答
12

使用 {dplyr}:

library(dplyr)

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

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

# deciles
infert %>% 
  mutate(PCT = ntile(age, 10))
于 2019-06-23T11:51:50.670 回答
6
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).

于 2014-01-19T19:06:48.097 回答
1

您还可以使用 hmisc 包,它会为您提供以下百分位数:

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

只需使用 describe(table_ages)

于 2018-01-22T14:15:04.683 回答