2017-03-15 12 views
0

2つの変数に基づいて行をランク付けする必要があります。 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 

私は= NA Aに等しい3番目の変数、Cを計算します。 A == NA、C == Bの場合、Cスコアは常にA == NAの行がA!= NAの行を上回ってはならないことに従うべきです。

Aには5つの非NA値があるため、Max(A)はmax(C)とmax(B)は6番目に高いC値しか保持できません。 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は、そのB == 2がランクされたときには、ランキング逆さまを断りますB == 69の代わりに6 =

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),] 
関連する問題