Таким образом, я пытаюсь найти максимальное, второе максимальное и третье максимальное количество воды для каждого идентификатора клиента в год для набора данных. Я использую R и библиотеку sqldf, но я открыт для любых R-решений. Вот немного данных образца:Поиск максимального, второго максимального и третьего макс, агрегированного по двум параметрам в R или с R sqldf
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
В идеале я хотел бы вернуть три матрицы, max1
, max2
, max3
с колоннами ID
, Year
, Max
(или второй максимум или третий максимум, соответственно) Так max1 = [101, 2009, 375, 101, 2010, 381, 102, 2009, 275, 102, 2010, 469]
и т.д.
Мой первоначальный подход должен был сделать вложенным цикл с listofIDs
и 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
не будут читать такие переменные, как, что, так что я бы однозначно определить, где ID = 101
, где ID = 102
каждый раз.
Любые идеи о том, как получить sqldf, чтобы распознать мои переменные, или лучший способ найти максимальный, второй максимальный и третий максимальный агрегированный по году и идентификатору? Я работаю с большими наборами данных, так что идеально, что не займет навсегда.
Спасибо! Это дает правильный ответ. Если у вас есть время, вы можете объяснить, как это работает? Я довольно новичок в R и пытался посмотреть документацию на функции, которые вы используете, но я все еще немного потерял. Кроме того, чтобы получить min, second min и third min, вы бы изменили y [порядок (-y)] [x] на y [порядок (y)] [x]? (Просто догадаться) –
@ user2930124 Вы правы. Команда 'order' упорядочивает значения в порядке возрастания. Из-за '-' значения располагаются в порядке убывания. –
@ user2930124 Я добавил объяснение. –