这里是一个可以重现的数据示例。对于以下数据框:
我想添加一列“rank”,根据主题为SNR提供排名,以便它看起来像这样:
但是我得到了以下内容:
我也尝试使用不同的ties.method选项,但没有给我想要的结果(即仅排名1-3)。任何帮助将不胜感激!
df <- data.frame(Subject = c('John', 'John', 'John', 'John','Mary', 'Mary', 'Mary', 'Mary'),
SNR = c(-4,-4,0,4,0,4,4,8))
我想添加一列“rank”,根据主题为SNR提供排名,以便它看起来像这样:
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
我尝试使用了:
dfNew <- transform(df, Rank = ave(SNR, Subject, FUN = function(x) rank(x, ties.method = "first")))
但是我得到了以下内容:
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
我也尝试使用不同的ties.method选项,但没有给我想要的结果(即仅排名1-3)。任何帮助将不胜感激!
dplyr::dense_rank
进行操作。如果你不想使用包,只需使用两行基本R代码即可完成。 - Rich Scrivenfunction(x) as.numeric(factor(x))
在您的尝试中可以起作用。或者只需使用factor(x)
,因为 ave 函数会强制转换回SNR
的类型。 - rawr