假设我在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
我该怎么做?
答案 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