使用鍵和索引

官方的小插曲是這個主題的最佳介紹:

鍵與索引

data.table 可以通過一系列列鍵控,告訴感興趣的函式資料按這些列排序。要獲取或設定金鑰,請使用 ?key 中記錄的功能。

同樣,函式可以利用 data.table 的索引。每個索引 - 和一個表可以有多個 - 儲存有關一系列列的資料順序的資訊。像鍵一樣,索引可以加速某些任務。要獲取或設定索引,請使用 ?indices 中記錄的功能。

索引也可以自動設定(目前一次只能用於一列)。有關其工作原理以及如何在必要時禁用它的詳細資訊,請參閱 ?datatable.optimize

驗證和更新

金鑰列中允許缺少值。

鍵和索引儲存為屬性,並且可能意外地不對應於表中資料的實際順序。許多函式在使用之前檢查金鑰或索引的有效性,但值得記住。

更新後刪除鍵和索引,而不明顯的是保留排序順序。例如,從 DT = data.table(a=c(1,2,4), key="a") 開始,如果我們像 DT[2, a := 3] 一樣更新,則金鑰被破壞。