iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
AI & Data

30天成為資料分析師-手把手R語言與資料分析教學系列 第 13

[Day 13] R語言data frame合併(join, merge)

  • 分享至 

  • xImage
  •  

在資料分析上,常需要合併多組dataframe,成為一組完整的資料,今天我們就來介紹dataframe之間如何進行合併。
最常見的合併套件有兩種,一種是使用原生的套件merge(),另外一個方法則是使用dplyr套件中的join系列函數,下方會針對4種不同的合併方法來進行整理。
舉兩個dataframe合併為例,其中一個包含商品名稱與商品數量,另一個包含商品名稱與商品價錢,兩個dataframe共同的欄位名稱為商品名稱,因此在合併時會使用商品名稱當串接的欄位,資料內容如下:

# 商品名稱與商品數量
item_count = data.frame(
                          item = c("milk", "apple", "cookie", "mug", "beef"),
                          count = c(2, 3, 4, 6, 5)
                        )
                        
item_count
    item count
1   milk     2
2  apple     3
3 cookie     4
4    mug     6
5   beef     5

# 商品名稱與商品價錢
item_price = data.frame(
                          item = c("milk", "apple", "cookie", "mug", "fish"),
                          price = c(10, 12, 7, 20, 30)
                        )
                        
item_price
    item price
1   milk    10
2  apple    12
3 cookie     7
4    mug    20
5   fish    30                        
  • inner join: 只保留兩個dataframe同時有的
    https://ithelp.ithome.com.tw/upload/images/20230913/20162612BFk0JEV8Kt.png
library(dplyr)
# 使用merge()
merge(x = item_count, y = item_price, by = "item")

# 或使用dplyr套件
item_count %>% inner_join(item_price, by = "item")
    item count price
1  apple     3    12
2 cookie     4     7
3   milk     2    10
4    mug     6    20
  • outer join: 保留所有(dataframe1+dataframe2)
    https://ithelp.ithome.com.tw/upload/images/20230913/20162612kqfv5hFdID.png
# 使用merge()
merge(x = item_count, y = item_price, by = "item", all=TRUE)

# 或使用dplyr套件
item_count %>% full_join(item_price, by = "item")
    item count price
1   milk     2    10
2  apple     3    12
3 cookie     4     7
4    mug     6    20
5   beef     5    NA
6   fish    NA    30
  • left join: 以dataframe1為基礎(取左邊資料的當key),將datafram2做合併
    https://ithelp.ithome.com.tw/upload/images/20230913/20162612Td40tcGESi.png
# 使用merge()
merge(x = item_count, y = item_price, by = "item", all.x=TRUE)

# 或使用dplyr套件
item_count %>% left_join(item_price, by = "item")
    item count price
1   milk     2    10
2  apple     3    12
3 cookie     4     7
4    mug     6    20
5   beef     5    NA
  • right join: 以dataframe2為基礎(取右邊資料的當key),將datafram1做合併
    https://ithelp.ithome.com.tw/upload/images/20230913/20162612zROFhmiryY.png
# 使用merge()
merge(x = item_count, y = item_price, by = "item", all.y=TRUE)

# 或使用dplyr套件
item_count %>% right_join(item_price, by = "item")
    item count price
1   milk     2    10
2  apple     3    12
3 cookie     4     7
4    mug     6    20
5   fish    NA    30

以上是常見的4種合併資料方法


上一篇
[Day 12] R語言dplyr套件介紹(2)
下一篇
[Day 14] 資料分析-數據的種類
系列文
30天成為資料分析師-手把手R語言與資料分析教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言