使用 data.table 在 R 中连接数据


在本文中,我们将讨论如何使用 data.table 包在 R 中连接数据。 “连接数据” 这个术语指的是在两个或多个表之间执行不同类型的连接操作,例如 INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN 和 FULL OUTER JOIN。 执行表连接操作的主要目的是基于某些属性(或列)条件访问多个表中的数据。

R 为我们提供了 data.table 包,借助该包,我们可以非常有效地处理表格数据(具有行和列)。 该包作为 R 的默认 data.frame 的替代方案推出,用于操作数据。 与 data.frame 相比,data.table 在速度和代码大小方面都非常高效。 data.table 的语法也很直观简洁,使其成为开发人员的理想选择。 该包为我们提供了功能,我们可以使用这些功能有效地执行表之间的连接操作。

在 SQL 中,连接子句用于基于它们之间列条件连接来自两个或多个关系或表的行。

在继续之前,我们需要定义两个表,以便在它们上执行不同的连接操作。

使用 data.table 创建表

data.table 包为我们提供了 data.table() 函数,我们可以使用该函数轻松地在 R 中构建这些表。

语法

此函数具有以下语法:

data.table(column_name1 = values, column_name2 = values, column_name3 = values, …)

它返回一个表,其中数据存储为行和列。

示例

让我们创建 Employees 表:

# Importing data.table package library("data.table") # Creating table1 employeesTable <- data.table(Employee_ID = 1:5, Employee_Name = c("Bhuwanesh", "Jai", "Piyush", "Hitesh", "Anil"), Department_ID = c(1, 11, 4, 11, 8), Salary = c(30000, 27000, 19000, 21000, 25000)) # Print table1 print(employeesTable)

输出

   Employee_ID Employee_Name Department_ID Salary
1:           1     Bhuwanesh             1  30000
2:           2           Jai            11  27000
3:           3        Piyush             4  19000
4:           4        Hitesh            11  21000
5:           5          Anil             8  25000

创建 Departments 表:

# Importing data.table package library("data.table") # Creating table2 departmentsTable <- data.table(Department_ID = c(4, 11, 5, 17, 3), Department_Name = c("IT", "Finance", "Sales", "HR", "Marketing")) # Print table2 print(departmentsTable)

输出

   Department_ID Department_Name
1:             4              IT
2:            11         Finance
3:             5           Sales
4:            17              HR
5:             3       Marketing

使用 data.table 连接数据

在 R 中,我们有以下类型的连接:

  • 内部连接 (Inner join)

  • 左外部连接 (Left outer join)

  • 右外部连接 (Right outer join)

  • 全外部连接 (Full outer join)

请注意,要使用 data.table 在两个表之间执行连接,您需要设置一个键,以便可以在其上设置 ON 子句。

data.table 包为我们提供了 setKey() 函数,该函数具有以下语法:

setKey(table1, ON = column_name)
setKey(table2, ON = column_name)

使用 data.table 进行内部连接

这种类型的连接返回在各个表中具有匹配值的记录。

例如,考虑一对表 table1 和 table2,其中包含一些数据。 然后,我们可以用 Venn 图表示这两个表的内部连接,如下所示:

语法

内部连接是 data.table 下的基本连接,并遵循以下语法:

innerJoin <- table1[table2, nomatch=0]

示例

现在让我们使用 data.table 在 Employees 和 Departments 表之间执行内部连接操作。

# Import data.table library library("data.table") # Create table1 employeesTable <- data.table(Employee_ID = 1:5, Employee_Name = c("Bhuwanesh", "Jai", "Piyush", "Hitesh", "Anil"), Department_ID = c(1, 11, 4, 11, 8), Salary = c(30000, 27000, 19000, 21000, 25000)) # Create table2 departmentsTable <- data.table(Department_ID = c(4, 11, 5, 17, 3), Department_Name = c("IT", "Finance", "Sales", "HR", "Marketing")) # Set the ON clause on Department_ID as the key of the tables setkey(employeesTable, ON = Department_ID) setkey(departmentsTable, ON = Department_ID) # Perform the inner join by eliminating not matched rows innerJoin <- employeesTable[departmentsTable, nomatch=0] # Display the result of inner join print(innerJoin)

输出

   Employee_ID Employee_Name Department_ID Salary Department_Name
1:           3        Piyush             4  19000              IT
2:           2           Jai            11  27000         Finance
3:           4        Hitesh            11  21000         Finance

使用 data.table 进行左外部连接

这种类型的连接返回匹配的记录以及左侧表中剩余的记录。

例如,考虑一对表table1table2,其中包含一些数据。 然后,我们可以用 Venn 图表示这两个表的左外部连接,如下所示:

左外部连接是 data.table 下的基本连接,并遵循以下语法:

语法

table2[table1]

示例

现在让我们使用 data.table 在 Employees 和 Departments 表之间执行左外部连接操作:

# Import data.table library library("data.table") # Create table1 employeesTable <- data.table(Employee_ID = 1:5, Employee_Name = c("Bhuwanesh", "Jai", "Piyush", "Hitesh", "Anil"), Department_ID = c(1, 11, 4, 11, 8), Salary = c(30000, 27000, 19000, 21000, 25000)) # Create table2 departmentsTable <- data.table(Department_ID = c(4, 11, 5, 17, 3), Department_Name = c("IT", "Finance", "Sales", "HR", "Marketing")) # Set the ON clause on Department_ID as the key of the tables setkey(employeesTable,Department_ID) setkey(departmentsTable,Department_ID) # Perform the left outer join by including matched rows # and remaining rows from the left leftOuterJoin <- departmentsTable[employeesTable] # Display the result of left outer join print(leftOuterJoin)

输出

   Department_ID Department_Name Employee_ID Employee_Name Salary
1:             1            <NA>           1     Bhuwanesh  30000
2:             4              IT           3        Piyush  19000
3:             8            <NA>           5          Anil  25000
4:            11         Finance           2           Jai  27000
5:            11         Finance           4        Hitesh  21000

使用 data.table 进行右外部连接

右外部连接返回匹配的记录以及右侧表中剩余的记录。 例如,考虑一对表table 1table 2,其中包含一些数据。 然后,我们可以用 Venn 图表示这两个表的右外部连接,如下所示:

语法

右外部连接是 data.table 下的基本连接,并遵循以下语法:

table1[table2]

示例

现在让我们使用 data.table 在 Employees 和 Departments 表之间执行右外部连接操作:

# Import data.table library library("data.table") # Create table1 employeesTable <- data.table(Employee_ID = 1:5, Employee_Name = c("Bhuwanesh", "Jai", "Piyush", "Hitesh", "Anil"), Department_ID = c(1, 11, 4, 11, 8), Salary = c(30000, 27000, 19000, 21000, 25000)) # Create table2 departmentsTable <- data.table(Department_ID = c(4, 11, 5, 17, 3), Department_Name = c("IT", "Finance", "Sales", "HR", "Marketing")) # Set the ON clause on Department_ID as the key of the tables setkey(employeesTable,Department_ID) setkey(departmentsTable,Department_ID) # Perform the right join by including matched rows # and remaining rows from the right rightOuterJoin <- employeesTable[departmentsTable] # Print the result of right join result print(rightOuterJoin)

输出

   Employee_ID Employee_Name Department_ID Salary Department_Name
1:          NA          <NA>             3     NA       Marketing
2:           3        Piyush             4  19000              IT
3:          NA          <NA>             5     NA           Sales
4:           2           Jai            11  27000         Finance
5:           4        Hitesh            11  21000         Finance
6:          NA          <NA>            17     NA              HR

全外部连接

全外部连接返回匹配的记录以及左侧表和右侧表中剩余的记录。

例如,考虑一对表table1table2,其中包含一些数据。 然后,我们可以用 Venn 图表示这两个表的全外部连接,如下所示:

语法

全外部连接是 data.table 下的基本连接,并遵循以下语法:

merge(table1, table2, all=TRUE)

示例

现在让我们使用 data.table 在 Employees 和 Departments 表之间执行全外部连接操作:

# Perform the full outer join fullOuterJoin <- merge(employeesTable, departmentsTable, all=TRUE) # Print the full outer join result print(fullOuterJoin)

输出

   Department_ID Employee_ID Employee_Name Salary Department_Name
1:             1           1     Bhuwanesh  30000            <NA>
2:             3          NA          <NA>     NA       Marketing
3:             4           3        Piyush  19000              IT
4:             5          NA          <NA>     NA           Sales
5:             8           5          Anil  25000            <NA>
6:            11           2           Jai  27000         Finance
7:            11           4        Hitesh  21000         Finance
8:            17          NA          <NA>     NA              HR

结论

在本教程中,我们讨论了如何使用 data.table 在 R 中连接数据。 我们详细讨论了不同类型的连接:内部连接、左外部连接、右外部连接和全外部连接。 我相信本教程将加强您在数据科学领域的知识。

更新于: 2023年1月17日

2K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告