0

データセットを十分位数に分割しようとしています。すべての行に id # (1:nrow(dataset)) を付けてから、cut() 関数を使用して各行を十分位数に割り当てます。

> df1 <- data.frame(id = 1:1000, cutter1 = NA)
> head(df1)
  id cutter1
1  1      NA
2  2      NA
3  3      NA
4  4      NA
5  5      NA
6  6      NA
> df1$cutter1 <- cut(df1$id,10, labels = F)
> table(df1$cutter1)

  1   2   3   4   5   6   7   8   9  10 
100 100 100 100 100 100 100 100 100 100 

上記は私が期待するものですが、行数を 100000 に増やすと、1 および 10 十分位数で奇妙な動作が見られます。

> df1 <- data.frame(id = 1:100000, cutter1 = NA)
> head(df1)
  id cutter1
1  1      NA
2  2      NA
3  3      NA
4  4      NA
5  5      NA
6  6      NA
> df1$cutter1 <- cut(df1$id,10, labels = F)
> table(df1$cutter1)

    1     2     3     4     5     6     7     8     9    10 
 9920 10020 10020 10020 10020 10020 10020 10020 10020  9920

include.lowestとパラメータをいじってみましたがright、何も修正されませんでした。なぜこれが起こっているのですか?

4

1 に答える 1

3

出力の形式がうまくいくかどうかはわかりませんが、これは別の解決策になる可能性があります。

decile <- with(df1, cut(id, breaks=quantile(df1$id, probs=seq(0,1, by=0.1)), include.lowest=TRUE))
res = table(decile)
names(res) <-as.character(seq(1:10))

これは、次の場合でも正常に機能します。 df1 <- data.frame(id = 1:100000, cutter1 = NA)

于 2013-08-19T17:57:37.673 に答える