Dưới đây là ví dụ về dữ liệu của tôi có thể tái sản xuất. Đối với các khung dữ liệu sau:thêm cột vào khung dữ liệu trong R dựa trên thứ hạng của một cột khác
df <- data.frame(Subject = c('John', 'John', 'John', 'John','Mary', 'Mary', 'Mary', 'Mary'),
SNR = c(-4,-4,0,4,0,4,4,8))
Tôi muốn thêm một cột chữ 'rank' mà cung cấp một bảng xếp hạng cho SNR theo chủ đề, do đó nó sẽ trông như thế này:
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
Tôi đã cố gắng sử dụng:
dfNew <- transform(df, Rank = ave(SNR, Subject, FUN = function(x) rank(x, ties.method = "first")))
Nhưng tôi nhận được như sau:
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
Tôi cũng đã thử sử dụng các tùy chọn ties.method khác nhau, nhưng không có gì cho tôi những gì tôi đang tìm kiếm (tức là, chỉ xếp hạng từ 1-3).
Mọi trợ giúp sẽ được đánh giá cao!
Hãy thử với 'dplyr :: dense_rank'. Hoặc chỉ sử dụng mã của nó nếu bạn không muốn sử dụng một gói; nó chỉ có hai dòng mã R cơ sở. –
'Hàm (x) as.numeric (yếu tố (x))' sẽ hoạt động trong nỗ lực của bạn. hoặc chỉ 'yếu tố (x)' kể từ khi ave sẽ coerce trở lại loại 'SNR' anyway – rawr
Cảm ơn bạn @rawr, đã làm các trick. – Rmg