R:根据一列的订单数据帧

时间:2014-11-28 06:29:30

标签: r

我有这样的数据

> bbT11
     range   X0  X1 total         BR      GDis      BDis         WOE         IV    Index
1   (1,23] 5718 194  5912 0.03281461 12.291488  8.009909  0.42822753 1.83348973 1.534535
2  (23,26] 5249 330  5579 0.05915039 11.283319 13.625103 -0.18858848 0.44163352 1.207544
3  (26,28] 3105 209  3314 0.06306578  6.674549  8.629232 -0.25685394 0.50206815 1.292856
4  (28,33] 6277 416  6693 0.06215449 13.493121 17.175888 -0.24132650 0.88874916 1.272937
5  (33,37] 4443 239  4682 0.05104656  9.550731  9.867878 -0.03266713 0.01036028 1.033207
6  (37,41] 4277 237  4514 0.05250332  9.193895  9.785301 -0.06234172 0.03686928 1.064326
7  (41,46] 4904 265  5169 0.05126717 10.541702 10.941371 -0.03721203 0.01487247 1.037913
8  (46,51] 4582 230  4812 0.04779717  9.849527  9.496284  0.03652287 0.01290145 1.037198
9  (51,57] 4039 197  4236 0.04650614  8.682287  8.133774  0.06526000 0.03579599 1.067437
10 (57,76] 3926 105  4031 0.02604813  8.439381  4.335260  0.66612734 2.73386708 1.946684

我需要添加一个额外的列“Bin”,它将显示从1到10的数字,具体取决于BR列是降序,所以例如第10行成为第一行,然后第一行成为第二行,等等。 任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

一种非常直接的方法是使用“dplyr”中的一个rank函数(例如:dense_rankmin_rank)。在这里,我实际上只使用了基础R中的rank。我删除了下面的一些列仅用于演示目的。

library(dplyr)
mydf %>% mutate(bin = rank(BR))
#      range   X0  X1 total         BR ...    Index bin
# 1   (1,23] 5718 194  5912 0.03281461 ... 1.534535   2
# 2  (23,26] 5249 330  5579 0.05915039 ... 1.207544   8
# 3  (26,28] 3105 209  3314 0.06306578 ... 1.292856  10
# 4  (28,33] 6277 416  6693 0.06215449 ... 1.272937   9
# 5  (33,37] 4443 239  4682 0.05104656 ... 1.033207   5
# 6  (37,41] 4277 237  4514 0.05250332 ... 1.064326   7
# 7  (41,46] 4904 265  5169 0.05126717 ... 1.037913   6
# 8  (46,51] 4582 230  4812 0.04779717 ... 1.037198   4
# 9  (51,57] 4039 197  4236 0.04650614 ... 1.067437   3
# 10 (57,76] 3926 105  4031 0.02604813 ... 1.946684   1

如果您只想重新排序行,请改用arrange

mydf %>% arrange(BR)

答案 1 :(得分:0)

bbT11$Bin[order(bbT11$BR)] <- 1:nrow(bbT11)