笛卡尔联接是两个对象的联接,创建对象中每个值与另一个对象中所有值的组合。例如,如果我们有一个包含x,1、2、3的向量x,而另一个对象y包含a,b,c,则笛卡尔连接将为1a,2a,3a,1b,2b,3b,1c,2c和3c。查看以下示例,了解如何完成此操作。
> library(data.table) > DT1<-data.table(x=1:4) > DT1
输出结果
x 1: 1 2: 2 3: 3 4: 4
> DT2<-data.table(y=25:30) > DT2
输出结果
y 1: 25 2: 26 3: 27 4: 28 5: 29 6: 30
执行DT1和DT2的笛卡尔连接:
> DT1[,as.list(DT2),by=DT1]
输出结果
x y 1: 1 25 2: 1 26 3: 1 27 4: 1 28 5: 1 29 6: 1 30 7: 2 25 8: 2 26 9: 2 27 10: 2 28 11: 2 29 12: 2 30 13: 3 25 14: 3 26 15: 3 27 16: 3 28 17: 3 29 18: 3 30 19: 4 25 20: 4 26 21: 4 27 22: 4 28 23: 4 29 24: 4 30 x y
让我们看另一个例子:
> DT_G<-data.table(Group=LETTERS[1:5]) > DT_G
输出结果
Group 1: A 2: B 3: C 4: D 5: E
> DT_Count<-data.table(sample(21:50,5)) > DT_Count
输出结果
V1 1: 22 2: 28 3: 45 4: 31 5: 47
执行DT_G和DT_Count的笛卡尔连接:
> DT_G[,as.list(DT_Count),by=DT_G]
输出结果
Group V1 1: A 22 2: A 28 3: A 45 4: A 31 5: A 47 6: B 22 7: B 28 8: B 45 9: B 31 10: B 47 11: C 22 12: C 28 13: C 45 14: C 31 15: C 47 16: D 22 17: D 28 18: D 45 19: D 31 20: D 47 21: E 22 22: E 28 23: E 45 24: E 31 25: E 47 Group V1