例如,如果我的数据如下所示:
> 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。
答案 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