2017-03-15 86 views
1

假设我有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这将需要的值1为y,2为用于y,4为x,5为用于x,6第二最小正数值的最小正数值的第三最小正数值的y,3所述第二最小正数值的最小正数值第三小的正数值x。那是我想要的输出是:

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

什么是你的领带计划是什么? –

+0

@PierreLafortune不会有任何联系,因为x,y会连续。 – ABC

+0

你会遇到x和y都为零的情况吗?或者他们都不是零的情况? –

回答

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

它的工作原理是'order'允许多个向量作为参数。每当一个矢量中有一个领带时,就会使用下一个,依此类推。 –

1

或者修改的办法是打电话orderorder输出

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 
相关问题