tidyr::expand()
возвращает все возможные комбинации значений из нескольких столбцов.Я ищу немного другое поведение, когда все значения находятся в одном столбце и комбинации должны быть взяты между группами.
Например, пусть данные будут определены следующим образом:
library( tidyverse )
X <- bind_rows( data_frame(Group = "Group1", Value = LETTERS[1:3]),
data_frame(Group = "Group2", Value = letters[4:5]) )
Нам нужны все комбинации значений от Group1
со значениями от Group2
.Мое текущее неуклюжее решение состоит в том, чтобы разделить значения по нескольким столбцам
Y <- X %>% group_by(Group) %>% do(vals = .$Value) %>% spread(Group, vals)
# # A tibble: 1 x 2
# Group1 Group2
# <list> <list>
# 1 <chr [3]> <chr [2]>
с последующей двойной unnest
операцией
Y %>% unnest( .preserve = Group2 ) %>% unnest
# # A tibble: 6 x 2
# Group1 Group2
# <chr> <chr>
# 1 A d
# 2 A e
# 3 B d
# 4 B e
# 5 C d
# 6 C e
Это желаемый вывод, но, как вы можете себе представить,это решение плохо обобщается: с увеличением числа групп увеличивается число unnest
операций, которые мы должны выполнить.
Есть ли более элегантное решение?