我正在解决从金融中心删除邮件的财务问题。我正在使用 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.frame 样式但是我想知道data.table是否有更优雅的方式)?
- 最后一个命令中的复制是什么?遵循通过引用删除行的线程,我认为复制是唯一的方法。如果我有多个任务,我可以以某种方式将它们组合起来并避免为每个任务复制吗?