Y at-il une meilleure façon de créer quantile « mannequins » / facteurs R?

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

  •  10-10-2019
  •  | 
  •  

Question

à des facteurs comme Id Assigner représentant quantiles. Ainsi je les ai besoin d'être numérique. C'est pourquoi je l'ai écrit la fonction suivante, qui est essentiellement la réponse à mon problème:

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)

    }

vous pouvez rire maintenant :). La liste renvoyée contient une variable qui peut être utilisé pour attribuer à chaque observation à son quantile correspondant. Ma question est maintenant: est-il une meilleure façon (plus « native » ou « noyau ») pour le faire? Je sais quantcut (du paquet gtools), mais au moins les paramètres que j'ai, je me suis retrouvé avec seulement avec les unhandy (- au moins pour moi) seuils.

Tout thats rétroaction aide à obtenir de meilleurs est apprécié!

Était-ce utile?

La solution

Avec base R, utiliser quantiles pour comprendre les fentes puis coupé pour convertir la variable numérique à discret:

qcut <- function(x, n) {
  cut(x, quantile(x, seq(0, 1, length = n + 1)), labels = seq_len(n),
    include.lowest = TRUE)
}

ou si vous voulez juste le nombre:

qcut2 <- function(x, n) {
  findInterval(x, quantile(x, seq(0, 1, length = n + 1)), all.inside = T)
}

Autres conseils

Je ne suis pas sûr de ce que quantcut est, mais je ferais ce qui suit

qdum <- function(v, q) {
 library(Hmisc)
 quantilenum <- cut2(v, g=q)
 levels(quantilenum) <- 1:q
 cbind(v, quantilenum)
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top