1

例如,如果我的数据如下所示:

> a <- c(1:25)
> a
[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

我如何获得这样的列表:

1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 

所以我想把这25个元素分成5个子列表,找出每个元素所属的子列表的索引。数据未排序并且太大而无法排序。还有缺失值,在这种情况下,它们的索引将为 0。

抱歉,澄清一下,我不需要组的大小相等,但它们需要除以 0.2、0.4、0.6、0.8 分位数。

即我输出中的第 i 个元素应该是 a 中第 i 个元素所属的第 n 个分位数。例如,8 在第二个分位数中,我输出中的第 8 个元素是 2。

4

2 回答 2

2

也许:

 acut <- cut(a, 
             quantile(a, probs=c(0, 0.2, 0.4, 0.6, 0.8, 1) ) , 
             include.lowest=TRUE)

 as.numeric(acut) 
于 2013-11-21T04:56:58.857 回答
1
# random data with 3 NAs
> a<-sample(c(NA,NA,NA,sample(1:1000,25)))
> a
 [1] 414 744 897 777  20 371 625 462 341 766  NA 243  NA 213 198 691  NA 325 275 526 830 179  40 601  51 725  68 709
> b<-ceiling(rank(a,na.last="keep")/length(which(!is.na(a)))*5)
> b[is.na(b)]=0
> b
 [1]  3  5  5  5  1  3  4  3  3  5 NA  2 NA  2  2  4 NA  2  2  3  5  1  1  4  1  4  1  4
# check that all groups have the same size
> table(b)
b
1 2 3 4 5 
5 5 5 5 5
于 2013-11-21T04:23:32.047 回答