Chiavi complesse

Unire i dati con data.table in R

Scott Ritchie

Postdoctoral Researcher in Systems Genomics

Join specificati male

Cosa succede se non usi le colonne giuste come chiavi di join?

  • Viene generato un errore
  • Il risultato è un data.table malformato
Unire i dati con data.table in R

Mancata corrispondenza dei tipi di colonna

Usare colonne chiave di tipi diversi produce un errore

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)

Unire i dati con data.table in R

Mancata corrispondenza dei tipi di colonna

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)

Unire i dati con data.table in R

Full join malformati - nessun valore chiave in comune

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

Unire i dati con data.table in R

Right e left join malformati - nessun valore chiave in comune

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

Unire i dati con data.table in R

Inner join malformati - nessun valore chiave in comune

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

Unire i dati con data.table in R

Join malformati - valori chiave comuni casuali

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

Unire i dati con data.table in R

Evitare join specificati male

Capire cosa rappresenta ogni colonna prima dei join ti aiuta a evitare errori

Unire i dati con data.table in R

Chiavi con nomi di colonna diversi

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]
Unire i dati con data.table in R

Chiavi multi-colonna

Unire i dati con data.table in R

Chiavi multi-colonna

Unire i dati con data.table in R

Specificare più chiavi con merge()

merge(purchases, web_visits, by = c("name", "date"))
merge(purchases, web_visits, 
      by.x = c("name", "date"),  
      by.y = c("person", "date")
Unire i dati con data.table in R

Specificare più chiavi con la sintassi di 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")]
Unire i dati con data.table in R

Diapositiva finale

Unire i dati con data.table in R

Preparing Video For Download...