Hier ist ein reproduzierbares Beispiel meiner Daten. Für die folgenden Datenrahmen:Hinzufügen einer Spalte zu einem Datenrahmen in R basierend auf dem Rang einer anderen Spalte
df <- data.frame(Subject = c('John', 'John', 'John', 'John','Mary', 'Mary', 'Mary', 'Mary'),
SNR = c(-4,-4,0,4,0,4,4,8))
würde Ich mag eine Spalte ‚Rang‘ hinzuzufügen, die ein Ranking für SNR nach Thema bietet, so dass es wie folgt aussehen:
Subject SNR Rank
John -4 1
John -4 1
John 0 2
John 4 3
Mary 0 1
Mary 4 2
Mary 4 2
Mary 8 3
ich versucht habe, Verwendung:
dfNew <- transform(df, Rank = ave(SNR, Subject, FUN = function(x) rank(x, ties.method = "first")))
Aber ich folgendes:
Subject SNR Rank
John -4 1
John -4 2
John 0 3
John 4 4
Mary 0 1
Mary 4 2
Mary 4 3
Mary 8 4
Ich habe auch versucht, die verschiedenen ties.method Optionen, aber keiner gibt mir, was ich suche (d. H. Ranking nur von 1-3).
Jede Hilfe wäre sehr willkommen!
Versuchen Sie mit 'dplyr :: dicht_rank'. Oder verwenden Sie einfach den Code, wenn Sie kein Paket verwenden möchten. es sind nur zwei Zeilen des Basis-R-Codes. –
'Funktion (x) as.numeric (Faktor (x))' würde in Ihrem Versuch arbeiten. oder einfach 'factor (x)' da ave sowieso auf die Art von 'SNR' zurückgreift – rawr
Danke @rawr, das hat den Trick gemacht. – Rmg