次のデータ フレームがあるとします。
df <- data.frame(store = LETTERS[1:8],
sales = c( 9, 128, 54, 66, 23, 132, 89, 70),
successRate = c(.80, .25, .54, .92, .85, .35, .54, .46))
に応じて店舗をランク付けしたいsuccessRate
ので、売上高の多い店舗を引き分けにしたいので、最初にこれを行います (視覚化を簡単にするため):
df <- df[order(-df$successRate, -df$sales), ]
ランキング変数を実際に作成するには、次のようにします。
df$rank <- ave(df$successRate, FUN = function(x) rank(-x, ties.method='first'))
したがって、df
次のようになります。
store sales successRate rank
4 D 66 0.92 1
5 E 23 0.85 2
1 A 9 0.80 3
7 G 89 0.54 4
3 C 54 0.54 5
8 H 70 0.46 6
6 F 132 0.35 7
2 B 128 0.25 8
問題は、小さな店をランキングに入れたくないということです。具体的には、売上50未満の店舗はランクインしないでほしい。df$rank
したがって、これは私が代わりに定義する方法です:
df$rank <- ifelse(df$sales < 50, NA,
ave(df$successRate, FUN = function(x) rank(-x, ties.method='first')))
問題は、これにより店舗 E と A が正しく削除されても、それらが占有していたランキングが再割り当てされないことです。df
次のようになります。
store sales successRate rank
4 D 66 0.92 1
5 E 23 0.85 NA
1 A 9 0.80 NA
7 G 89 0.54 4
3 C 54 0.54 5
8 H 70 0.46 6
6 F 132 0.35 7
2 B 128 0.25 8
の内側と外側の条件を試してみましたave()
が、R に自分のやりたいことをさせることができません! このように店舗をランク付けするにはどうすればよいですか?
store sales successRate rank
4 D 66 0.92 1
5 E 23 0.85 NA
1 A 9 0.80 NA
7 G 89 0.54 2
3 C 54 0.54 3
8 H 70 0.46 4
6 F 132 0.35 5
2 B 128 0.25 6