同样在向量中排名NA [r]

jal*_*pic 5 r na

我想知道我是否遗漏了一些微不足道的东西:

在对包含NA的此类矢量进行排名时,有四种选择如何处理NA:

x<-c(5, NA, 3, NA, 6, 9, 10, NA, 5, 7, 12)

rank(x, na.last=T)   
# [1]  2.5  9.0  1.0 10.0  4.0  6.0  7.0 11.0  2.5  5.0  8.0

rank(x, na.last=F)
# [1]  5.5  1.0  4.0  2.0  7.0  9.0 10.0  3.0  5.5  8.0 11.0

rank(x, na.last=NA)
# [1] 2.5 1.0 4.0 6.0 7.0 2.5 5.0 8.0

rank(x, na.last="keep")
#  [1] 2.5  NA 1.0  NA 4.0 6.0 7.0  NA 2.5 5.0 8.0
Run Code Online (Sandbox Code Playgroud)

我希望保持和排名NAs.为了我的目的,他们应该平等和最后排名.在这种情况下ties.method,要使用的是默认的"平均值".我正在寻找这个结果:

#  [1] 2.5  10.0 1.0  10.0 4.0 6.0 7.0  10.0 2.5 5.0 8.0
Run Code Online (Sandbox Code Playgroud)

从?rank帮助:"NA值永远不会被认为是相等的:对于na.last = TRUE和na.last = FALSE,它们按照它们在x中出现的顺序给出不同的等级."

所以,它看起来像我想要的 - 即平等对待它们并且通过使用不可能将它们的等级平均为最后等级rank.这是真的 - 有没有通过排名完成这项工作的简单方法?在做完之后,我是否必须依赖第二行代码重新插入NA的等级 rank(x, na.last="keep")

jos*_*ber 2

您可以将其向前和向后排序,然后取平均值:

(rank(x, na.last=T) + rev(rank(rev(x), na.last=T))) / 2
# [1]  2.5 10.0  1.0 10.0  4.0  6.0  7.0 10.0  2.5  5.0  8.0
Run Code Online (Sandbox Code Playgroud)