R中的分组排名

时间:2015-10-21 07:40:40

标签: r

我有一个主键和比率值的数据,如下所示

2.243164164
1.429242413
2.119270714
3.013427143
1.208634972
1.208634972
1.23657632
2.212136028
2.168583297
2.151961216
1.159886063
1.234106444
1.694206176
1.401425329
5.210125578
1.215267806
1.089189869

我想添加一个排名列,将这些比率分组为3个分箱。功能类似于sas代码:

PROC RANK DATA = TAB1 GROUPS = &NUM_BINS

1 个答案:

答案 0 :(得分:0)

我做了以下事情: 将矢量转换为数据帧。 创建变量Rank:

test2$rank<-rank(test2$test)
> test2
   test    rank
1  2.243164 15.0
2  1.429242  9.0
3  2.119271 11.0
4  3.013427 16.0
5  1.208635  3.5
6  1.208635  3.5
7  1.236576  7.0
8  2.212136 14.0
9  2.168583 13.0
10 2.151961 12.0
11 1.159886  2.0
12 1.234106  6.0
13 1.694206 10.0
14 1.401425  8.0
15 5.210126 17.0
16 1.215268  5.0
17 1.089190  1.0

定义转换为百分位数的函数,然后将pr定义为百分位数。

percent.rank<-function(x) trunc(rank(x)/length(x)*100)
test3<-within(test2,pr<-percent.rank(rank))

然后我根据你想要的3个事件创建了垃圾箱。

test3$bins <- cut(test3$pr, breaks=c(0,33,66,100), labels=c("0-33","34-66","66-100"))

       test    x rank  pr   bins
1  2.243164 15.0 15.0  88 66-100
2  1.429242  9.0  9.0  52  34-66
3  2.119271 11.0 11.0  64  34-66
4  3.013427 16.0 16.0  94 66-100
5  1.208635  3.5  3.5  20   0-33
6  1.208635  3.5  3.5  20   0-33
7  1.236576  7.0  7.0  41  34-66
8  2.212136 14.0 14.0  82 66-100
9  2.168583 13.0 13.0  76 66-100
10 2.151961 12.0 12.0  70 66-100
11 1.159886  2.0  2.0  11   0-33
12 1.234106  6.0  6.0  35  34-66
13 1.694206 10.0 10.0  58  34-66
14 1.401425  8.0  8.0  47  34-66
15 5.210126 17.0 17.0 100 66-100
16 1.215268  5.0  5.0  29   0-33
17 1.089190  1.0  1.0   5   0-33

那对你有用吗?