R语言 用data.table连接数据
在这篇文章中,我们将讨论使用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, …)
它返回一个以行和列形式存储数据的表。
示例
让我们来创建雇员表 –
# 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
创建部门表 –
# 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连接数据
- 内部连接
-
左外连接
-
右外联接
-
全外链
请注意,要使用data.table在两个表之间执行连接,你需要设置一个键,我们可以在这个键上设置ON子句。
data.table包为我们提供了setKey()函数,其语法如下
setKey(table1, ON = column_name)
setKey(table2, ON = column_name)
与data.table的内联
这种类型的连接返回在各自表中有匹配值的记录。
例如,考虑一对表table1和table2有一些数据。那么,我们可以用维恩图来表示这两个表的内部连接,即
语法
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的左外连接
这种类型的连接返回匹配的记录以及左表的剩余记录。
例如,考虑一对表table1和table2有一些数据。那么,我们可以用维恩图来表示这两个表的左外连接,即
左外连接是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的右外连接
右外连接返回匹配的记录以及右表的剩余记录。例如,考虑一对拥有一些数据的表1和表2。那么,我们可以用Venn图来表示这两个表的右外联接,即
语法
右外连接是data.table下的基本连接,遵循下面给出的语法
table1[table2]
示例
# 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
完全外联
一个全外连接返回匹配的记录以及左表和右表的剩余记录。
例如,考虑一对表table1和table2有一些数据。那么,我们可以用Venn图来表示这两个表的全外连接,即
语法
全外连接是data.table下的基本连接,遵循下面给出的语法
merge(table1, table2, all=TRUE)
示例
# 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
结论
在本教程中,我们讨论了如何在R中用data.table连接数据。我们详细讨论了不同类型的连接。内连接、左外连接、右外连接和全外连接。我相信,本教程将加强你在数据科学领域的知识。