Имеет ли вывод dplyr summarize определенный порядок вывода c? - PullRequest
1 голос
/ 03 августа 2020

При выполнении сгруппированного резюме в 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 не заинтересован в обеспечении порядка строк, но так или иначе не смог найти окончательного утверждения.

...