R语言 用data.table连接数据

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有一些数据。那么,我们可以用维恩图来表示这两个表的内部连接,即

在R中用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的左外连接

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

例如,考虑一对表table1和table2有一些数据。那么,我们可以用维恩图来表示这两个表的左外连接,即

在R中用data.table连接数据

左外连接是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图来表示这两个表的右外联接,即

在R中用data.table连接数据

语法

右外连接是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图来表示这两个表的全外连接,即

在R中用data.table连接数据

语法

全外连接是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连接数据。我们详细讨论了不同类型的连接。内连接、左外连接、右外连接和全外连接。我相信,本教程将加强你在数据科学领域的知识。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程