У меня есть data.table с примерно 3 миллионами строк и 40 столбцов. Я хотел бы отсортировать эту таблицу по убыванию в пределах групп, таких как следующий код sql mock:
sort by ascending Year, ascending MemberID, descending Month 
Есть ли эквивалентный способ в data.table для этого? Пока я должен разбить его на 2 шага:
setkey(X, Year, MemberID)
Это очень быстро и занимает всего несколько секунд.
X <- X[,.SD[order(-Month)],by=list(Year, MemberID)]
Этот шаг занимает намного больше времени (5 минут).
Обновление:
Кто-то сделал комментарий, чтобы сделать X <- X[sort(Year, MemberID, -Month)], а затем удален. Этот подход выглядит намного быстрее:
user  system elapsed 
5.560  11.242  66.236 
Мой подход: setkey(), затем order (-Month)
   user  system elapsed 
816.144   9.648 848.798 
Теперь мой вопрос: если я хочу обобщить Year, MemberId и Month после сортировки (Year, MemberID, Month), распознает ли порядок данных? data.table?
Обновление 2: ответ Мэтью Доуле:
После установки с помощью Year, MemberID и Month у меня все еще есть несколько записей для каждой группы. Я хотел бы обобщить для каждой из групп. Я имел в виду: если я использую X [order (Year, MemberID, Month)], то суммирование использует функции бинарного поиска data.table:
monthly.X <- X[, lapply(.SD[], sum), by = list(Year, MemberID, Month)]
Обновление 3: Мэтью D предложил несколько подходов. Время выполнения для первого подхода выполняется быстрее, чем метод order():
   user  system elapsed 
  7.910   7.750  53.916 
Мэтью: меня удивляло то, что преобразование знака месяца занимает большую часть времени. Без него функция setkey быстро пылает.
