如何通过分位数得到值的指数?

时间:2013-11-21 04:14:59

标签: r list vector quantile

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

> 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。

2 个答案:

答案 0 :(得分:2)

也许:

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

 as.numeric(acut) 

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