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

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