2015-10-12 51 views
1

我想用rank()函數對向量進行排名。 然而,我要求= 0至返回= 0秩,然後排名繼續以1用於與最低值的元素值...Rank函數將0排名爲0,將函數應用於具有某些值的向量元素?

實施例:

a<-c(0, 0:5, 0) 
rank(a, ties.method="first") 

(不希望的)輸出:

[1] 1 2 4 5 6 7 3 

所需的輸出看起來像:

[1] 0 0 1 2 3 4 5 0 

我想象的解決方案看起來像應用排名函數僅適用於向量(a)的元素(不)具有值0

+1

也許'dplyr :: dense_rank(a) - 1'儘管假定你在向量中有零。 –

回答

1

我們可以rank排除0值的元素並替換相應的值向量中的元素由新的rank向量組成。

a1 <- a 
a1[a1!=0] <- rank(a1[a1!=0]) 
a1 

或者我們可以用replace一步完成此操作。

replace(a, a!=0, rank(a[a!=0])) 
+1

此答案給出了所需的輸出: '[1] 0 0 1 2 3 4 5 0' – biotechris

相關問題