如何在 R 中对两个 data.table 对象执行笛卡尔连接?
r programmingserver side programmingprogramming更新于 2025/4/9 23:22:17
笛卡尔连接是指将两个对象连接起来,将一个对象中的每个值与另一个对象中的所有值组合起来。例如,如果向量 x 包含 1、2、3,另一个对象 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