2014-09-04 7 views
5
내가 여기에 사소한 뭔가를 누락하면 내가 궁금하네요

:순위의 NA 동등 [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 

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 

"NA 값이 동일한 것으로 간주되지 않습니다 : na.last 위해 그들이에 별개의 계급을 FALSE = TRUE 및 na.last 주어진다 = x에서 일어나는 순서. "

그래서 원하는대로 처리합니다. 즉 균등하게 처리하고 마지막 순위로 평균을 계산하는 것은 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 
관련 문제