¿Hay una mejor manera de crear “maniquíes” cuantiles / factores de I?
Pregunta
Me gustaría asignar factores que representan cuantiles. De este modo los necesito para ser numérico. Es por eso que escribí la siguiente función, que es básicamente la respuesta a mi problema:
qdum <- function(v,q){
qd = quantile(v,1:(q)/q)
v = as.data.frame(v)
v$b = 0
names(v) <- c("a","b")
i=1
for (i in 1:q){
if(i == 1)
v$b[ v$a < qd[1]] = 1
else
v$b[v$a > qd[i-1] & v$a <= qd[i]] = i
}
all = list(qd,v)
return(all)
}
puede reír ahora :). La lista devuelta contiene una variable que se puede utilizar para asignar cada observación a su correspondiente cuantil. Mi pregunta ahora es: ¿hay una manera mejor (más "nativo" o "núcleo") para hacerlo? Yo sé de quantcut (del paquete gtools), pero al menos con los parámetros que tengo, que terminó con sólo con aquellos unhandy (- al menos para mí) umbrales.
Cualquier eso retroalimentación ayuda a obtener mejores se aprecia!
Solución
Con R base, uso cuantiles de averiguar las divisiones y luego se corta para convertir la variable numérica a discreta:
qcut <- function(x, n) {
cut(x, quantile(x, seq(0, 1, length = n + 1)), labels = seq_len(n),
include.lowest = TRUE)
}
o si lo que desea es el número:
qcut2 <- function(x, n) {
findInterval(x, quantile(x, seq(0, 1, length = n + 1)), all.inside = T)
}
Otros consejos
No estoy seguro de lo que es quantcut pero me gustaría hacer lo siguiente
qdum <- function(v, q) {
library(Hmisc)
quantilenum <- cut2(v, g=q)
levels(quantilenum) <- 1:q
cbind(v, quantilenum)
}