2014-09-04 51 views
5

,如果我在这里失踪一些小事我想知道:排名来港同样[R]

排名时这样含有的NA的向量,还有如何处理与NAS四个选项:

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 

我期待着保持和排名新手。为了我的目的,他们应该排名并保持最后。在这种情况下,要使用的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 

从排名求助:“NA值永远不会被视为相等:对于na.last = TRUE和na.last = FALSE给他们不同的行列中在x中出现的顺序“。

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

回答

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 
3

我不知道这是否是最好的解决方法,但让他们总是在最后,你可以更换NA值,就像这样:

rank(replace(x, is.na(x), max(x,na.rm=TRUE) + 1)) 
#[1] 2.5 10.0 1.0 10.0 4.0 6.0 7.0 10.0 2.5 5.0 8.0