我正在處理從金融中心刪除郵件的財務問題。我使用的是data.table,我對它的性能和易於處理非常滿意。高效地匹配多個變量的行 - 排除列
雖然我總是問自己如何改進和使用data.table的全部功能。
這是我的任務的示例:
set.seed(1)
DT <- data.table(SYM = c(rep("A", 10), rep("B", 12)), PRC = format(rlnorm(22, 2), digits = 2), VOL = rpois(22, 312), ID = c(seq(1000, 1009), seq(1004, 1015)), FLAG = c(rep("", 8), "R", "A", rep("", 4), "R", rep("", 7)))
DT$PRC[9] <- DT$PRC[6]
DT$PRC[7] <- DT$PRC[6]
DT$VOL[9] <- DT$VOL[6]
DT$VOL[7] <- DT$VOL[6]
DT$PRC[15] <- DT$PRC[13]
DT$VOL[15] <- DT$VOL[13]
## See the original dataset
DT
## Set the key
setkey(DT, "SYM", "PRC", "VOL", "FLAG")
## Get all rows, that match a row with FLAG == "R" on the given variables in the list
DT[DT[FLAG == "R"][,list(SYM, PRC, VOL)]]
## Remove these rows from the dataset
DT <- DT[!DT[FLAG == "R"][,list(SYM, PRC, VOL)]]
## See the modified data.table
DT
我的問題是現在:
- 這是執行我的任務的有效方式或確實存在着更多的東西「data.table」樣式?密鑰設置是否有效?
- 如果我不僅要有三個變量匹配(這裏是:SYM,PRC,VOL),而且還有更多,是否存在排除項目(我知道我可以使用它的數據),我該如何執行我的任務。框架樣式,但我想知道是否有一個更優雅的方式data.table)?
- 什麼是在最後一個命令中複製?繼remove row by reference之後,我認爲複製是唯一的方法。如果我有幾項任務,我可以以某種方式複合它們並避免爲每項任務進行復制?
+1是數據隨機的?我看到一個'rlnorm'(儘管我不確定那是什麼)。你可以在頂部使用'set.seed(1)'(或其他種子),所以我們都在同一頁面上?儘管我會保留表DT1 < - DT [!...]的兩個版本,因爲我不習慣記住內存約束,所以我會盡我所能。 – Frank
@Frank感謝您的評論!你是對的!而且我的數據不是隨機的:) –