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