¿Hay una mejor manera de crear “maniquíes” cuantiles / factores de I?

StackOverflow https://stackoverflow.com/questions/3998469

  •  10-10-2019
  •  | 
  •  

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!

¿Fue útil?

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)
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top