在数据框中添加列,该列是另外两列的正元素的等级

时间:2017-03-15 01:12:43

标签: r dataframe

假设我在R中有一个数据框:

d=data.frame(x=c(0,20,0,12,0,73),y=c(22,0,32,0,5,0))

   d
    x  y
 1  0 22
 2 20  0
 3  0 32
 4 12  0
 5  0  5
 6 73  0

现在我要创建另一个列rank,其中y的最小正值为1,第二个最小正值为y为2,第三个为3 y的最小正值,x的最小正值为4,x的第二个最小正值为5,x的第三个最小正值为6 。这是我想要的输出是:

   d
    x  y rank
 1  0 22 2 
 2 20  0 5
 3  0 32 3
 4 12  0 4
 5  0  5 1
 6 73  0 6

我该怎么做?

2 个答案:

答案 0 :(得分:4)

当x = 0时按y排序,然后当y = 0时x乘以x先排序,然后按y排序,所以你可以使用order按x然后y排序,并指定排名按顺序:

d[order(d$x,d$y),"rank"] <- 1:dim(d)[1]
   x  y rank
1  0 22    2
2 20  0    5
3  0 32    3
4 12  0    4
5  0  5    1
6 73  0    6

答案 1 :(得分:1)

或者修改后的选项是在order输出

上调用order
d$rank <- order(do.call(order, d))
d
#   x  y rank
#1  0 22    2
#2 20  0    5
#3  0 32    3
#4 12  0    4
#5  0  5    1
#6 73  0    6