我有以下几行代码:
DT[flag==T, temp:=haz_1.5]
DT[, temp:= na.locf(temp, na.rm = FALSE), "pid"]
DT[agedays==61, haz_1.5_1:=temp]
我需要将其转换为一个函数,以便它可以处理一系列变量,而不仅仅是一个变量。我最近学习了如何使用 lapply 通过传递列列表和创建一组新列的条件来创建函数。但是,当我传递列列表以及在这些列上向前传递变量的所有值时,我不确定如何执行此操作。
例如,我可以编写以下代码:
columns<-c("haz_1.5", "waz_1.5")
new_cols <- paste(columns, "1", sep = "_")
x=61
maled_anthro[(flag==TRUE)&(agedays==x), (new_cols) := lapply(.SD, function(y) na.locf(y, na.rm=F)), .SDcols = columns]
但我缺少 na.locf 步骤,因此在构建函数之前没有获得与原始代码行相同的输出。我如何将利用 na.locf 传递值 (DT[ temp:= na.locf(temp, na.rm = FALSE), "pid"]) 的代码行合并到此函数中,其中所有数据都包装到单个函数中?这会以同样的方式与 lapply 一起工作吗?
与我正在使用的数据表类似的虚拟数据:
DT <- data.table(pid = c(1,1,2,3,3,4,4,5,5,5),
flag = c(T,T,F,T,T,F,T,T,T,T),
agedays = c(1,61,61,51,61,23,61,1,32,61),
haz_1.5 = c(1,1,1,2,NA,1,3,2,3,4),
waz_1.5 = c(1,NA,NA,NA,NA,2,2,3,4,4))