Domanda

i'd come fattori di assegnare rappresentano quantili. Così ho bisogno di loro di essere numerico. Ecco perché ho scritto la seguente funzione, che è sostanzialmente la risposta al mio 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)

    }

Si può ridere ora :). L'elenco restituito contiene una variabile che può essere utilizzato per assegnare ogni osservazione al suo quantile corrispondente. La mia domanda è ora: c'è un modo migliore (più "nativo" o "core") per farlo? So di quantcut (dal pacchetto gtools), ma almeno con i parametri che ho avuto, ho finito con solo con quelli unhandy (-? Almeno per me) le soglie.

Tutti i thats di feedback aiuta a stare meglio è apprezzato!

È stato utile?

Soluzione

Con base R, uso quantili di capire le fessure e poi tagliato per convertire la variabile numerica discreta:

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

o se si desidera solo il numero:

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

Altri suggerimenti

Non sono sicuro di quello che è quantcut ma vorrei fare quanto segue

qdum <- function(v, q) {
 library(Hmisc)
 quantilenum <- cut2(v, g=q)
 levels(quantilenum) <- 1:q
 cbind(v, quantilenum)
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top