そのため、データセットの年間顧客 ID ごとの最大、2 番目の最大、および 3 番目の最大水使用量を見つけようとしています。私は R と sqldf ライブラリを使用していますが、これに対する R ソリューションを受け入れることができます。サンプルデータの一部を次に示します。
Year | ID | Month | Use |
----------------------------
2009 101 1 103
2009 101 2 209
2009 101 3 375
2009 101 4 360
2010 101 1 170
2010 101 2 381
2010 101 3 275
2010 101 4 260
2009 102 1 263
2009 102 2 234
2009 102 3 45
2009 102 4 275
2010 102 1 469
2010 102 2 107
2010 102 3 354
2010 102 4 436
理想的には、列、、(またはそれぞれ 2 番目の最大値または 3 番目の最大値) を持つ 3 つの行列max1
、を返したいと思います。max2
max3
ID
Year
Max
max1 = [101, 2009, 375, 101, 2010, 381, 102, 2009, 275, 102, 2010, 469]
私の最初のアプローチは、次のように、 andのドメインとしてlistofIDs
andを入れ子にした for ループを作成することでした。listofYears
ID
Year
for i in 1:length(listofIDs){
for y in 1:length(listofYears){
monthlylist<-sqldf("select Month, Use from Dataframe where ID=listofIDs[i] and Year=listofYears[y]")
そしてmonthlylist
、最大値などを並べ替えて引き出します。ただし、sqldf
そのような変数は読み取れないため、毎回明示的に where ID = 101
、 whereを指定する必要があります。ID = 102
sqldf に変数を認識させる方法、または年と ID で集計された最大値、2 番目の最大値、3 番目の最大値を見つけるより良い方法についてのアイデアはありますか? 私は大きなデータセットを扱っているので、理想的には永遠にかからないものです。