Gibt es eine bessere Art und Weise Quantil „Dummies“ / Faktoren in R zu schaffen?
Frage
Id wie zu assign Faktoren darstellen quantiles. So muss ich sie numerisch sein. Darum schrieb ich die folgende Funktion, die im Grunde die Antwort auf mein Problem ist:
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)
}
Sie können jetzt lachen :). Die zurückgegebene Liste enthält eine Variable, die verwendet werden können, jede Beobachtung zu seinem entsprechenden Quantil zuzuweisen. Meine Frage ist nun: Gibt es eine bessere Art und Weise (mehr „native“ oder „Kern“), es zu tun? Ich weiß, über quantcut (aus dem gtools Paket), aber zumindest mit den Parametern Ich habe, ich am Ende mit nur mit denen unhandlich (- zumindest für mich) Schwellen.
Jedes Feedback, das ist besser zu erhalten hilft sehr geschätzt wird!
Lösung
Mit Base R, Verwendung quantiles, um herauszufinden, den Spagat und dann schneiden die numerische Variable auf diskrete zu konvertieren:
qcut <- function(x, n) {
cut(x, quantile(x, seq(0, 1, length = n + 1)), labels = seq_len(n),
include.lowest = TRUE)
}
oder wenn Sie wollen einfach nur die Nummer:
qcut2 <- function(x, n) {
findInterval(x, quantile(x, seq(0, 1, length = n + 1)), all.inside = T)
}
Andere Tipps
Ich bin mir nicht sicher, was quantcut ist, aber ich würde die folgenden
tunqdum <- function(v, q) {
library(Hmisc)
quantilenum <- cut2(v, g=q)
levels(quantilenum) <- 1:q
cbind(v, quantilenum)
}