上次观察按组在多列上进行

Last observation carried forward by group over multiple columns

我有一个数据集,其中包含对多名患者的观察及其随时间的诊断。有 9 个不同的虚拟变量,每个代表一个特定的诊断,例如命名为L40、L41、K50、M05等

在虚拟变量中有缺失值的地方,我想把最后一个非缺失值由患者结转,这样一旦患者得到诊断,就会跟进后续的观察。

我从这个开始,使用 zoo 包中的 na.locf 函数。

diagdata <- originaldata[,grep("^patient|^ar|^edatum|^K|^L|^M",colnames(originaldata))]

require(zoo)
require(data.table)

diagnosis <- data.table(diagdata)

diagnosis[,L40:=na.locf(L40),by=patient]

这实现了我正在寻找的东西,但仅限于有问题的列 (L40)。有什么方法可以将以上内容应用于所有相关诊断列,即以 K、L 和 M 开头的列?

cols = grep("^K|^L|^M", names(diagnosis), value = T)

diagnosis[, (cols) := na.locf(.SD, na.rm = F), by = patient, .SDcols = cols]

也看看