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)
得到相同的结果。
我需要将四分位数粘贴到 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)
得到相同的结果。