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

以上是 如何对R中的两个data.table对象执行笛卡尔联接? 的全部内容, 来源链接: utcz.com/z/340776.html

回到顶部