これは私のデータの再現可能な例です。次のデータフレームの場合:他の列のランクに基づいてRのデータフレームに列を追加する
df <- data.frame(Subject = c('John', 'John', 'John', 'John','Mary', 'Mary', 'Mary', 'Mary'),
SNR = c(-4,-4,0,4,0,4,4,8))
私はそれは次のようになりますように、件名による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")))
しかし、私は、次のGET:
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コードの2行だけです。 –
'function(x)as.numeric(factor(x))'があなたの試みで動作します。とにかく「SNR」のタイプに戻ってくれるので、「factor(x)」と表示されます。 – rawr
@rawrありがとう、そのトリックはありました。 – Rmg