R割函数的尾部小于其他子集



我正试图将数据集拆分为十分位数。我给所有的行一个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.lowestright参数,但它们没有修复任何内容。知道为什么会发生这种事吗?

我不确定输出的格式是否适合您,但这可能是一个替代解决方案:

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)

最新更新