我正在尝试将数据表“ A”中的两个列与另一个数据表“ B”中的另一列进行两个合并,这是列的唯一值。我想以这样的方式进行合并:对于数据表“ A”中两个变量的每个唯一组合,我们将重复获取数据表“ B”中列的所有唯一值。
我尝试了合并,但是并没有给我所有的值。我还尝试了data.table中的自动回收功能,但这也没有给我结果。
输入: data.table A
X Y
1 1
1 2
1 3
2 1
3 1
4 4
4 5
5 6
data.table B
Z
1
2
预期产量
X Y Z
1 1 1
1 1 2
1 2 1
1 2 2
1 3 1
1 3 2
2 1 1
2 1 2
3 1 1
3 1 2
4 4 1
4 4 2
4 5 1
4 5 2
5 6 1
5 6 2
答案 0 :(得分:2)
我们可以利用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))]