2016-06-08 5 views
-2

Я использую data.table ниже команду, которая должна выполнять аналогично ddply аналог:Data.table результат группировка не в правильном порядке

DT[,mean(var),by=group] 

VS.

ddply(DF,.(group), summarise, mean(var)) 

Где levels(group) дает "1","2","3","4","5".

Мой вопрос, почему DT возвращает таблицу со столбцом группы не упорядочены, т.е. она возвращает:

Group   V1 
1-  2 0.0012030079 
2-  3 0.0012680941 
3-  4 -0.0003243492 
4-  5 0.0008718012 
5-  1 0.0009910559 

Вместо ожидаемого и фактического выхода из ddply команды:

Group   ..1 
1  1 0.0009910559 
2  2 0.0012030079 
3  3 0.0012680941 
4  4 -0.0003243492 
5  5 0.0008718012 

I воспользуемся обходным решением DT[,mean(var),by=group][order(group)], чтобы вернуть отсортированный список, но это довольно болезненно. Любая помощь по этому поводу приветствуется. Благодаря!

PS. Стол, который я скопировал из консоли R, похоже, не отображается здесь должным образом, я сожалею об этом. Как я могу отобразить его как таблицу?

ответ

4

Как указывается в разделе для by= в ?data.table:

«Сохраняется порядок строк в каждой группе, как порядок из групп»

Таким образом, ожидаемый результат - это именно то, что вы получили. Еще один удобный способ иметь дело с сортировкой заключается в использовании:

DT[,mean(var),keyby=group] 

В соответствии с ?data.table документов снова:

«Это обычная практика, чтобы использовать keyby= обычно, когда вы хотите, результата будут отсортировано «.

+0

Спасибо за идеальный ответ. Хотя мне интересно, почему упорядочение по уровням не выполнялось по умолчанию, как в случае с ddply. –

+0

@ LukeShi Это был бы другой вопрос – akrun

Смежные вопросы