Oto powtarzalny przykład moich danych. Na poniższej ramce danych:Dodawanie kolumny do ramki danych w R na podstawie pozycji innej kolumny
df <- data.frame(Subject = c('John', 'John', 'John', 'John','Mary', 'Mary', 'Mary', 'Mary'),
SNR = c(-4,-4,0,4,0,4,4,8))
Chciałbym dodać kolumnę „rangi”, która stanowi pozycję dla SNR według tematu, tak że będzie ona wyglądać tak:
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
Próbowałem przy użyciu:
dfNew <- transform(df, Rank = ave(SNR, Subject, FUN = function(x) rank(x, ties.method = "first")))
Ale mam następujące:
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
Próbowałem również używać różnych opcji ties.method, ale żadna nie daje mi tego, czego szukam (tj. Tylko w rankingu od 1-3).
Każda pomoc będzie bardzo ceniona!
Spróbuj z 'dplyr :: dense_rank'. Lub po prostu użyj jego kodu, jeśli nie chcesz używać pakietu; to tylko dwie linie podstawowego kodu R. –
'function (x) as.numeric (factor (x))' zadziałałoby przy twojej próbie. lub po prostu "factor (x)", ponieważ ave będzie zmuszać do powrotu do typu 'SNR' tak czy inaczej – rawr
Dziękuję @rawr, który załatwił sprawę. – Rmg