




Исходя из двух фреймов данных с одинаковым количеством строк, используя dplyr, я бы сделал так:
inner_join(
mutate(groups, rand = sample(n())),
mutate(tasks, rand = sample(n())),
by = "rand"
) %>%
select(-rand)
Это сопоставит каждую строку из groups с каждой строкой из tasks случайным образом, но гарантирует, что каждая группа и каждая задача включены. Он будет хорошо обобщаться, если у вас есть больше столбцов в любом фрейме данных. Предполагается, что у вас одинаковое количество строк в каждом, иначе будут включены все строки из меньшего фрейма данных и случайная подвыборка строк из большего фрейма данных.
Если вы хотите что-то еще, пожалуйста, уточните характеристики вашего случайного процесса.
Установка inner_join(..., by = "rand", keep = FALSE) приведет к удалению rand после того, как вы закончите с ним.
@muadiib это новая версия или версия для разработчиков? Я использую dplyr 0.8.0.1, которая довольно актуальна, и похоже, что keep = FALSE реализована только для nest_join. Я не вижу упоминания об этом в файле NEWS на Github.
Конечно, вы правы. keep работает только для nest_join.
Вы проверили с
sample?