2017-03-15 1 views
0

2 개의 변수를 기반으로 행의 순위를 매길 필요가 있으며 주위를 감쌀 수 없습니다. 아래두 변수에 기초한 순위

테스트 데이터 : 동일

df <- data.frame(A = c(12,35,55,7,6,NA,NA,NA,NA,NA), B = c(NA,12,25,53,12,2,66,45,69,43)) 

A B 
12 NA 
35 12 
55 25 
7 53 
6 12 
NA 2 
NA 66 
NA 45 
NA 69 
NA 43 

I 제 3 변수를 계산하려면, C 때 A = NA!. A == NA, C == B 일 때 C 점수는 항상 A == NA 인 행이 A! = NA를 가진 행보다 우월하지 않아야합니다.

A가 5 개의 비 NA 값을 가지기 때문에 Max (A)는 max (C)와 max (B)가 같아야합니다. A == NA이고 B가 A! = NA 인 행보다 낫다면 A! = NA 행이 항상 최종 C 스코어에서 B 행보다 우수하다는 것을 확인하는 변환이 수행되어야합니다.

결과는 다음과 같이 보일 수 있습니다 :

A B C 
55 25 1 
35 12 2 
12 NA 3 
7 53 4 
6 12 5 
NA 69 6 
NA 66 7 
NA 45 8 
NA 43 9 
NA 2 10 

를 지금까지 내가 얻을 수있는 가장 가까운

df$C <- ifelse(is.na(df$A), min(df$A, na.rm=T)/df$B, df$A) 

이지만 == NA는, == 2 위를 기록하고 B를 이용하므로 때이 순위 상승 여력 거절 6 대신 B == 69

A B C 
55 25 1 
35 12 2 
12 NA 3 
7 53 4 
6 12 5 
NA 2 6 
NA 43 7 
NA 45 8 
NA 66 9 
NA 69 10 

가중치를 사용할 수 있는지 잘 모르겠습니까?

모든 의견을 매우 높이 평가합니다. 감사!

답변

0

당신이 시도 할 수 :

df$C <- order(-df$A) 
df[is.na(df$A),"C"] <- sort.list(order(-df[is.na(df$A),"B"]))+length(which(!is.na(df$A))) 

와 C의 순서 :

df[order(df$C),] 
관련 문제