R cran - 非重叠十分位数

R cran - non overlapping deciles

我需要将四分位数粘贴到 table,但必须避免值重叠。一个例子是:

table<-data.frame(num1=c(0,1,1,2,2,3,3,3,3,6), num2=seq(20,30,len=10))

如果我使用 dplyr 中的 ntile:

library(dplyr)
table$cuartil<-ntile(table$num1, 4)

我得到一个重叠的结果:

> table  
   num1     num2 cuartil
     0 20.00000       1
     1 21.11111       1
     1 22.22222       1
     2 23.33333       2
     2 24.44444       2
     3 25.55556       3
     3 26.66667       3
     3 27.77778       3
     3 28.88889       4
     6 30.00000       4

相反,我需要:

 num1   num2      cuartil
    0   20          1
    1   21.11111    1
    1   22.22222    1
    2   23.33333    2
    2   24.44444    2
    3   25.55556    3
    3   26.66667    3
    3   27.77778    3
    3   28.88889    3
    6   30          4

因此值 3 仅在一组中,而不是在两个(3 和 4)中。 是否有任何其他函数可以计算百分位数,但考虑不要像 ntile 那样重叠值?

您可以使用 quantile():

编写自己的函数
quartile <- function(x) {
  qrt <- quantile(x)
  y <- x
  y[x<=qrt[5]] <- 4
  y[x<=qrt[4]] <- 3
  y[x<=qrt[3]] <- 2
  y[x<=qrt[2]] <- 1
  y[x<=qrt[1]] <- 0
  return(y)
}

table$cuartil <- quartile(table$num1)

使用 Sam 的函数,通用函数可能是:

quantG <- function(x, m) 
    {library(plyr)
    qrt <- quantile(x,probs=seq(0, 1, 1/m) )
    y <- x
    for (i in (1:5) ) {y[x<=qrt[m+2-i]] <- m+1-i}
    return(y)}

并且:

table$cuartil <- quantG (table$num1,4)

得到相同的结果。