Złożone klucze

Łączenie danych z data.table w R

Scott Ritchie

Postdoctoral Researcher in Systems Genomics

Błędnie określone złączenia

Co się dzieje, gdy użyte zostaną nieprawidłowe kolumny jako klucze złączenia?

  • Zgłaszany jest błąd
  • Wynikiem jest nieprawidłowy data.table
Łączenie danych z data.table w R

Niezgodność typów kolumn

Użycie kolumn kluczy złączenia różnych typów spowoduje błąd

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)

Łączenie danych z data.table w R

Niezgodność typów kolumn

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)

Łączenie danych z data.table w R

Nieprawidłowe złączenia pełne – brak wspólnych wartości klucza

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

Łączenie danych z data.table w R

Nieprawidłowe złączenia prawostronne i lewostronne – brak wspólnych wartości klucza

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

Łączenie danych z data.table w R

Nieprawidłowe złączenia wewnętrzne – brak wspólnych wartości klucza

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

Łączenie danych z data.table w R

Nieprawidłowe złączenia – przypadkowe wspólne wartości klucza

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

Łączenie danych z data.table w R

Unikanie błędnie określonych złączeń

Zapoznanie się z zawartością kolumn przed złączeniami pozwala uniknąć błędów

Łączenie danych z data.table w R

Klucze z różnymi nazwami kolumn

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]
Łączenie danych z data.table w R

Klucze wielokolumnowe

Łączenie danych z data.table w R

Klucze wielokolumnowe

Łączenie danych z data.table w R

Określanie wielu kluczy za pomocą merge()

merge(purchases, web_visits, by = c("name", "date"))
merge(purchases, web_visits, 
      by.x = c("name", "date"),  
      by.y = c("person", "date")
Łączenie danych z data.table w R

Określanie wielu kluczy w składni 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")]
Łączenie danych z data.table w R

Ostatni slajd

Łączenie danych z data.table w R

Preparing Video For Download...