如何在 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

相关文章