排名函数将 0 排名为 0,将函数应用于具有特定值的向量元素?

Rank function to rank 0 as 0, apply a function to elements of vector with certain values?

我想用 rank() 函数对向量进行排名。 但是,我需要值 =0 到 return 的排名 =0,然后对于具有最低值的元素,排名继续为 1...

示例:

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

我想这个解决方案看起来像是将排名函数仅应用于 vector(a) 的元素(不)具有值 0

我们可以rank排除0值的元素,并用新的rank向量替换向量中相应元素中的值。

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

或者我们可以通过 replace.

一步完成
replace(a, a!=0, rank(a[a!=0]))