我需要将四分位数粘贴到表中,但必须避免重叠值。一个例子是:
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这样的值吗?
答案 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)
获得相同的结果。