使用 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+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.