2016-09-09 16 views
0

目前我正在學習data.table在R.這讓我感到困惑的幾個問題:的R - 的數據表中的記錄順序從子集化列

  1. 是否子集化列始終保持記錄的順序? (即行1,2,3會留作爲行1,2,3,而不是行1,3,2)

    此外,沒有相同的結論適用於不同的表達式,如DB[[1]], DB$V1

2. 當子集化多列,我知道我需要使用像DB[,.(V1, V2)],但我感到困惑的是什麼,從DB[,V1, V2]?

的代碼運行的結果,似乎產生結果,但行不在與原始表格的順序相同。如果有人能解釋後面的代碼是什麼意思,這將是很大的幫助。

非常感謝!

回答

0

我想從小建議開始......如果您在SO上創建了數據處理相關問題,那麼在問題中發送可重複代碼以及在不明確的情況下輸出預期輸出會非常好。您將覆蓋更多的觀衆並收集更多優質解決方案。這通常是標籤的常見做法。

  1. 子集維持秩序,基礎數據的存儲是面向列不同於常規的SQL數據庫(它不知道排順序),它的工作原理完全一樣,在基礎R子集化的載體,只是速度要快得多。
    關於[[$,這些只是從data.table提取列中的方法,一般一個list,你可以使用DB[[1]]DB[["V1"]]DB$V1。根據列/列表元素是否存在,它們的行爲會有所不同。 data.table [運營商內部

  2. 第三個參數是by其中超過預期組列,讓你查詢列V1 V2通過分組,而無需使用任何聚合函數。這與DB[, .(V1, V2)]DB[, c("V1","V2"), with=FALSE]DB[, list(V1,V2)]DB[, .SD, .SDcols=c("V1","V2")],...非常不同。大多數api都是從R基地借用的,功能如subset()with()

最後我會建議要經過data.table vignettes,也有我最近稍長後,通過各種data.table例子云:Boost Your Data Munging with R