Rに分位の「ダミー」 /要因を作成するより良い方法はありますか?
質問
分位を表す要因を割り当てたいと思います。したがって、私はそれらを数値である必要があります。それが私が次の関数を書いた理由です。これは基本的に私の問題に対する答えです。
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)
}
あなたは今笑うかもしれません:)。返されたリストには、すべての観測値を対応する分位に割り当てるために使用できる変数が含まれています。私の質問は今です:それを行うためのより良い方法(より「ネイティブ」または「コア」)はありますか?私はQuantCut(GToolsパッケージから)について知っていますが、少なくとも私が得たパラメーターを使用すると、私はそれらの不自然な(? - 少なくとも私にとって)しきい値だけで終わりました。
良くなるのに役立つフィードバックは、高く評価されています!
解決
ベースRを使用して、分位数を使用して分割を把握し、数値変数を離散に変換してカットします。
qcut <- function(x, n) {
cut(x, quantile(x, seq(0, 1, length = n + 1)), labels = seq_len(n),
include.lowest = TRUE)
}
または、番号が必要な場合:
qcut2 <- function(x, n) {
findInterval(x, quantile(x, seq(0, 1, length = n + 1)), all.inside = T)
}
他のヒント
私はQuantCutが何なのかわかりませんが、私は次のことをします
qdum <- function(v, q) {
library(Hmisc)
quantilenum <- cut2(v, g=q)
levels(quantilenum) <- 1:q
cbind(v, quantilenum)
}
所属していません StackOverflow