Мы можем использовать crossing
от tidyr
library(tidyr)
crossing(A, B)
# X Y Z
#1 1 1 1
#2 1 1 2
#3 1 2 1
#4 1 2 2
#5 1 3 1
#6 1 3 2
#7 2 1 1
#8 2 1 2
#9 3 1 1
#10 3 1 2
#11 4 4 1
#12 4 4 2
#13 4 5 1
#14 4 5 2
#15 5 6 1
#16 5 6 2
Или с merge
от base R
, но порядок будет немного другим
merge(A, B)
Чтобы получить правильный порядок, замените аргументы в обратном порядке, а затем упорядочите столбцы
merge(B, A)[c(names(A), names(B))]