2015-11-19 72 views
1

我需要在四分位数号码粘贴到一个表,但它必须避免重叠值。一个例子是:řCRAN - 非重叠十分位数

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

如果我使用NTILE从dplyr:

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

+1

@akrun。它被复制。我没有看到。 – GabyLP

+0

@akrun,对不起。你很棒。我虽然要污染这个地方。 – GabyLP

+0

感谢您的回复。此外,愚蠢的问题可以很容易地通过谷歌搜索发现。如果你能够恢复这个问题,那将会很棒。 – akrun

回答

1

你可以使用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) 
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) 

得到了相同的结果。