【问题标题】: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

标签: r statistics percentile


【解决方案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)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-04-26
            • 2020-10-07
            • 1970-01-01
            • 2011-12-29
            • 2013-06-20
            • 1970-01-01
            • 2017-12-03
            相关资源
            最近更新 更多