Ich muss Zeilen basierend auf zwei Variablen rangieren und ich kann einfach nicht meinen Kopf darum wickeln.Ranking basierend auf zwei Variablen
Testdaten unter:
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
Ich möchte eine dritte Variable berechnen, C, die A, wenn A = NA gleich!. Wenn A == NA, dann C == B, ABER sollte immer der C-Wert folgen, dass eine Reihe mit A == NA niemals eine Reihe mit A! = NA übertreffen sollte.
In den obigen Daten sollte Max (A) gleich max (C) und max (B) nur den sechsthöchsten C-Wert enthalten, da A fünf Nicht-NA-Werte hat. Wenn A == NA und B eine Reihe mit A! = NA übertrifft, dann sollte irgendeine Form der Transformation stattfinden, die sicherstellt, dass die A! = NA-Reihe immer die B-Reihe in der endgültigen C-Punktzahl übertrifft das Ergebnis in etwa so aussehen:
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
Bisher ist die nächste, die ich bekommen kann, ist
df$C <- ifelse(is.na(df$A), min(df$A, na.rm=T)/df$B, df$A)
Aber das macht das Ranking den Kopf, wenn A == NA, so B == 2 rangiert 6 anstelle von 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
Ich bin mir nicht sicher, ob ich irgendeine Art von Gewichten verwenden könnte?
Alle Vorschläge werden sehr geschätzt! Vielen Dank!