Sätta och visa nycklar i data.table

Att sammanfoga data med data.table i R

Scott Ritchie

Postdoctoral Researcher in Systems Genomics

Sätta nycklar i `data.table`

Med nycklar behöver du inte använda on-argumentet vid join-operationer

  • Praktiskt när en data.table används i många olika join-operationer

Sorterar data.table i minnet efter nyckelkolumn(erna)

  • Gör filtrering och join-operationer snabbare

Flera kolumner kan anges som nycklar

Att sammanfoga data med data.table i R

Funktionen `setkey()`

Nyckelkolumner skickas som argument

setkey(DT, ...)
setkey(DT, key1, key2, key3)

setkey(DT, "key1", "key2", "key3")
# To set all columns in DT as keys
setkey(DT)
Att sammanfoga data med data.table i R

Funktionen `setkey()`

Sätt nycklar i båda data.tables innan en join

setkey(dt1, dt1_key)
setkey(dt2, dt2_key)

Utför en inner-, höger- och vänsterjoin:

# Inner join dt1 and dt2
dt1[dt2, nomatch = 0] 

# Right join dt1 and dt2 dt1[dt2]
# Left join dt1 and dt2 dt2[dt1]
Att sammanfoga data med data.table i R

Sätta nycklar programmatiskt

Nyckelkolumner anges som en teckensträng-vektor

keys <- c("key1", "key2", "key3")
setkeyv(dt, keys)
Att sammanfoga data med data.table i R

Hämta nycklar

haskey() kontrollerar om nycklar är satta

haskey(dt1)
TRUE

key() returnerar de nyckelkolumner som är satta

key(dt1)
"dt1_key"
Att sammanfoga data med data.table i R

Hämta nycklar

När inga nycklar är satta

haskey(dt_no_key)
FALSE
key(dt_no_key)
NULL
Att sammanfoga data med data.table i R

Visa alla `data.table`s och deras nycklar

tables()
     NAME        NROW NCOL MB COLS                       KEY           
[1,] dt             3    4  1 key1,key2,key3,value       key1,key2,key3
[2,] dt1        1,000    3  1 dt1_key_column,value,group dt1_key
[3,] dt2        1,000    2  1 dt2_key_column,time        dt2_key
[4,] dt_no_key      5    2  1 id,color                                 
Total: 4MB
Att sammanfoga data med data.table i R

Nu kör vi en övning!

Att sammanfoga data med data.table i R

Preparing Video For Download...