При выполнении сгруппированного резюме в dplyr обычно суммируют все целевые переменные в одной команде:
# Method 1: summarize all target variables in one command
mtcars %>%
group_by(am) %>%
summarize(mpg = mean(mpg),
disp = mean(disp))
Однако можно предпочесть выполнять суммирование отдельно для большей гибкости и программируемости (да, я я знаю across
, но мне кажется, что его гибкость ограничена). В этом случае я предполагаю, что нужно объединить таблицы вместе в конце:
# Method 2: summarize separately and join
a <- mtcars %>%
group_by(am) %>%
summarize(mpg = mean(mpg))
b <- mtcars %>%
group_by(am) %>%
summarize(disp = mean(disp))
inner_join(a, b, by = 'am')
Объединения можно избежать, просто добавив сводку от b
до a
:
a$c <- b$disp
Однако это предполагает, что строки a
и b
находятся в одном порядке. Это, конечно, не гарантируется в целом, как обычно SQL базы данных не гарантируют порядок вывода. Когда dplyr использует такую базу данных в качестве бэкэнда, он предположительно будет отражать любой случайный порядок, в котором база данных вернула данные.
Мой вопрос: гарантирует ли vanilla dplyr (т.е. отсутствие внешнего бэкэнда) определенный порядок строк, таким образом, что решение без объединения можно считать безопасным и надежным? Я подозреваю, что dplyr не заинтересован в обеспечении порядка строк, но так или иначе не смог найти окончательного утверждения.