我想更新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_by
和mutate
函数。无论如何,我对任何有效的方法都持开放态度。
我们需要通过在()
中指定"cols_to_change"(在 lhs 上(来更新:=
列,以评估对象内部的值,而不是从字面上评估它
DT[,(cols_to_change) := nafill(.SD, "locf"), by=id, .SDcols = cols_to_change]