r语言 - 如何在不删除其他列的情况下更新 data.table 中预定义的列列表?



我想更新data.table中的某些列,而不会过于冗长。这里有一个几乎可以满足我要求的示例:

DT <- data.table(A=1:4, B=3:6, C=rep(1,4), id = c(1,1,2,2))
DT[2,1] <- NA
DT[3,2] <- NA
DT[4,3] <- NA
cols_to_change <- c("A","B")
DT <- DT[,nafill(.SD, "locf"), by=id, .SDcols = cols_to_change]

唯一的问题是"C"列被删除,"A"和"B"的名称被更改。实际上,我有更多的列要更改,我想运行两个更新函数(locf 和 nocb(,因此将它们全部列在cols_to_change向量中是有意义的,而不是在每个更新函数中重复列出所有这些列。我认为有一些方法可以用我不太掌握的:=来做到这一点,或者也许是使用 dyplr 的group_bymutate函数。无论如何,我对任何有效的方法都持开放态度。

我们需要通过在()中指定"cols_to_change"(在 lhs 上(来更新:=列,以评估对象内部的值,而不是从字面上评估它

DT[,(cols_to_change) := nafill(.SD, "locf"), by=id, .SDcols = cols_to_change]

最新更新