8

分位数を表す係数を割り当てたいと思います。したがって、数値である必要があります。そのため、基本的に私の問題に対する答えである次の関数を書きました。

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)

    }

あなたは今笑うかもしれません:)。返されたリストには、すべての観測値を対応する分位数に割り当てるために使用できる変数が含まれています。私の質問は今です:それを行うためのより良い方法(より「ネイティブ」または「コア」)はありますか? 私は(gtoolsパッケージから)quantcutについて知っていますが、少なくとも私が得たパラメータでは、それらの扱いにくい(? - 少なくとも私にとっては)しきい値だけで終わってしまいました。

改善に役立つフィードバックをお待ちしております。

4

2 に答える 2

13

ベース 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)
}
于 2010-10-23T00:48:05.860 に答える
3

quantcutが何であるかはわかりませんが、次のようにします

qdum <- function(v, q) {
 library(Hmisc)
 quantilenum <- cut2(v, g=q)
 levels(quantilenum) <- 1:q
 cbind(v, quantilenum)
}
于 2010-10-22T16:24:25.940 に答える