📅  最后修改于: 2023-12-03 15:23:17.012000             🧑  作者: Mango
在 R 编程中,我们经常需要合并两个数据集,data.table 对象是比较高效的一种方法。本文将介绍在 R 中如何合并两个 data.table 对象。
首先,我们需要准备两个 data.table 对象。
library(data.table)
dt1 <- data.table(id = c(1,2,3,4,5),
name = c("A", "B", "C", "D", "E"),
age = c(20,21,22,23,24))
dt2 <- data.table(id = c(1,2,3,6,7),
gender = c("M", "F", "M", "F", "M"),
salary = c(2000, 2500, 3000, 3500, 4000))
上面的代码创建了两个 data.table 对象。dt1 拥有 id、name、age 三列,dt2 拥有 id、gender、salary 三列。
inner join 会返回两个表中共同存在的所有记录。
dt_inner_join <- merge(dt1, dt2, by = "id")
这里通过 merge 函数实现 inner join,by = "id" 表示按照 id 列来合并数据。执行代码后,dt_inner_join 中就存储了合并后的结果。dt_inner_join 如下所示:
id name age gender salary
1: 1 A 20 M 2000
2: 2 B 21 F 2500
3: 3 C 22 M 3000
上述代码中只有 id 为 1、2、3 的记录被保留下来,而且两个表中都存在这些 id。
left join 会返回包含左表中所有记录以及右表中共同存在的记录。
dt_left_join <- merge(dt1, dt2, by = "id", all.x = TRUE)
这里通过设置 all.x = TRUE 来实现 left join,这样就保留了 dt1 中所有记录,即使在 dt2 中不存在或者 id 不相同。dt_left_join 如下所示:
id name age gender salary
1: 1 A 20 M 2000
2: 2 B 21 F 2500
3: 3 C 22 M 3000
4: 4 D 23 NA NA
5: 5 E 24 NA NA
注意到最后两行的 gender 和 salary 列对应的值为 NA,这是因为在 dt2 中并不存在对应的记录。
right join 会返回包含右表中所有记录以及左表中共同存在的记录。
dt_right_join <- merge(dt1, dt2, by = "id", all.y = TRUE)
这里通过设置 all.y = TRUE 来实现 right join,这样就保留了 dt2 中所有记录,即使在 dt1 中不存在或者 id 不相同。dt_right_join 如下所示:
id name age gender salary
1: 1 A 20 M 2000
2: 2 B 21 F 2500
3: 3 C 22 M 3000
4: 6 NA NA F 3500
5: 7 NA NA M 4000
注意到最后两行的 name 和 age 列对应的值为 NA,这是因为在 dt1 中并不存在对应的记录。
full join 会返回两个表中所有记录。
dt_full_join <- merge(dt1, dt2, by = "id", all = TRUE)
这里通过设置 all = TRUE 来实现 full join,这样就保留了 dt1 和 dt2 中所有记录,即使在其中一个表中不存在或者 id 不相同。dt_full_join 如下所示:
id name age gender salary
1: 1 A 20 M 2000
2: 2 B 21 F 2500
3: 3 C 22 M 3000
4: 4 D 23 NA NA
5: 5 E 24 NA NA
6: 6 NA NA F 3500
7: 7 NA NA M 4000
上述代码中保留了 dt1 和 dt2 中所有记录。
本文介绍了在 R 中如何合并两个 data.table 对象,通过 merge 函数实现了 inner join、left join、right join、full join。通过运用这些技巧,我们能快速有效地合并数据集,方便快捷地进行数据分析。