複合鍵

R 的 data.table 資料合併

Scott Ritchie

Postdoctoral Researcher in Systems Genomics

連接鍵指定錯誤

當你沒有使用正確的欄作為連接鍵時會怎樣?

  • 會丟出錯誤
  • 結果會是格式錯誤的 data.table
R 的 data.table 資料合併

欄位型別不相容

連接鍵欄位型別不同會產生錯誤

customers[web_visits, on = .(age = name)]
Error in bmerge(i, x, leftcols, rightcols, io, xo, roll, rollends, 
nomatch,  : 
  typeof x.age (double) != typeof i.name (character)

R 的 data.table 資料合併

欄位型別不相容

customers[web_visits, on = .(id)]
Error in bmerge(i, x, leftcols, rightcols, io, xo, roll, rollends, 
nomatch,  : 
  typeof x.id (integer) != typeof i.id(character)

R 的 data.table 資料合併

全外連接格式錯誤——沒有共同鍵值

merge(customers, web_visits, by.x = "address", by.y = "name", all = TRUE)

R 的 data.table 資料合併

左右連接格式錯誤——沒有共同鍵值

customers[web_visits, on = .(address = name)]

R 的 data.table 資料合併

內連接格式錯誤——沒有共同鍵值

customers[web_visits, on = .(address = name), nomatch = 0]

R 的 data.table 資料合併

連接格式錯誤——鍵值偶然相同

customers[web_visits, on = .(age = duration), nomatch = O]

R 的 data.table 資料合併

避免指定錯誤的連接

在連接前先了解每個欄位代表什麼,可幫你避免錯誤。

R 的 data.table 資料合併

欄名不同的鍵

merge(customers, web_visits, by.x = "name", by.y = "person")

customers[web_visits, on = .(name = person)] customers[web_visits, on = c("name" = "person")] key <- c("name" = "person") customers[web_visits, on = key]
R 的 data.table 資料合併

多欄位鍵

R 的 data.table 資料合併

多欄位鍵

R 的 data.table 資料合併

在 merge() 中指定多個鍵

merge(purchases, web_visits, by = c("name", "date"))
merge(purchases, web_visits, 
      by.x = c("name", "date"),  
      by.y = c("person", "date")
R 的 data.table 資料合併

用 data.table 語法指定多個鍵

purchases[web_visits, on = .(name, date)]
purchases[web_visits, on = c("name", "date")]
purchases[web_visits, on = .(name = person, date)]
purchases[web_visits, on = c("name" = "person", "date")]
R 的 data.table 資料合併

結束投影片

R 的 data.table 資料合併

Preparing Video For Download...