設定與檢視 data.table 的鍵值

R 的 data.table 資料合併

Scott Ritchie

Postdoctoral Researcher in Systems Genomics

設定 `data.table` 鍵值

設定鍵值後,進行連接時就不需要 on 參數。

  • 當同一個 data.table 要用於多種連接時很實用。

會依鍵值欄位在記憶體中排序 data.table

  • 加速篩選與連接操作

可同時設定並使用多個欄位作為鍵值

R 的 data.table 資料合併

`setkey()` 函式

將鍵值欄位作為引數傳入

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

setkey(DT, "key1", "key2", "key3")
# 將 DT 的所有欄位都設為鍵值
setkey(DT)
R 的 data.table 資料合併

`setkey()` 函式

在連接前,先為兩個 data.table 設定鍵值。

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

執行 inner、right、left 連接:

# Inner 連接 dt1 與 dt2
dt1[dt2, nomatch = 0] 

# Right 連接 dt1 與 dt2 dt1[dt2]
# Left 連接 dt1 與 dt2 dt2[dt1]
R 的 data.table 資料合併

以程式方式設定鍵值

以字元向量提供鍵值欄位

keys <- c("key1", "key2", "key3")
setkeyv(dt, keys)
R 的 data.table 資料合併

取得鍵值

haskey() 檢查是否已設定鍵值

haskey(dt1)
TRUE

key() 回傳你已設定的鍵值欄位

key(dt1)
"dt1_key"
R 的 data.table 資料合併

取得鍵值

當未設定任何鍵值時:

haskey(dt_no_key)
FALSE
key(dt_no_key)
NULL
R 的 data.table 資料合併

檢視所有 `data.table` 與其鍵值

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
R 的 data.table 資料合併

一起來練習吧!

R 的 data.table 資料合併

Preparing Video For Download...