如何在 R 中执行两个 data.table 对象的笛卡尔连接?


笛卡尔连接是将两个对象连接起来,创建对象中每个值与另一个对象中的所有值组合。例如,如果我们有一个包含 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

更新时间:19-11-2020

1K+ 浏览

开启你的 职业旅程

通过完成课程,获得认证

开始
广告
© . All rights reserved.