2017-03-15 82 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 
相關問題