R cran - 非重叠十分位数

时间:2015-11-19 18:36:55

标签: r overlap percentile

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

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这样的值吗?

2 个答案:

答案 0 :(得分:1)

您可以使用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) 编写自己的函数:

{{1}}

答案 1 :(得分:1)

使用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)

获得相同的结果。