获得与每个四分位数相对应的观察

时间:2014-02-25 09:33:37

标签: r dataframe quantile

q <- quantile(faithful$eruptions)
> q
     0%     25%     50%     75%    100% 
1.60000 2.16275 4.00000 4.45425 5.10000 

我得到以下结果,数据集在R。

中提供
 head(faithful)
  eruptions waiting
1     3.600      79
2     1.800      54
3     3.333      74
4     2.283      62
5     4.533      85
6     2.883      55

我想要一个包含数据的数据帧和一个额外的列,用于指出每个观察所属的分位数。例如,最终数据集应该看起来像

     eruptions waiting Quartile
1     3.600      79      Q1
2     1.800      54      Q2
3     3.333      74
4     2.283      62
5     4.533      85
6     2.883      55

如何做到这一点?

3 个答案:

答案 0 :(得分:8)

有什么想法吗?使用quantile函数中的值作为值来剪切所需的向量。

faithful$kva <- cut(faithful$eruptions, q)
levels(faithful$kva) <- c("Q1", "Q2", "Q3", "Q4")
faithful

    eruptions waiting  kva
1       3.600      79   Q2
2       1.800      54   Q1
3       3.333      74   Q2
4       2.283      62   Q2
5       4.533      85   Q4

答案 1 :(得分:1)

cut函数可以立即为每个分位数创建数字标签:

faithful$Quartile <- cut(faithful$eruptions,
                         quantile(faithful$eruptions),
                         labels = FALSE)

这将为最小喷发创建一个NA,如果您希望将最小喷发分配给第一个分位数,则可以在调用include.lowest = TRUE函数时添加cut

faithful$Quartile <- cut(faithful$eruptions,
                         quantile(faithful$eruptions),
                         labels = FALSE,
                         include.lowest = T)

答案 2 :(得分:0)

现在可以通过dplyr管道和ggplot2::cut_number()更方便地完成此操作。

library(dplyr)
library(ggplot2)

faithful %>% 
   mutate(Quartile = cut_number(eruptions, n = 4, labels = c("Q1", "Q2", "Q3", "Q4")))

默认情况下,与基数R cut()不同,最低观察值包括在内。