R cut函数尾部比其他子集少

时间:2013-08-19 17:34:55

标签: r cut

我正在尝试将数据集拆分为十分位数。我给了所有行一个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参数,但他们没有修复任何内容。知道为什么会这样吗?

1 个答案:

答案 0 :(得分: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)