【发布时间】:2015-07-18 14:06:23
【问题描述】:
我正在尝试填写所有 NA,不包括第 1 列和第 4 列的前两个 NA,以及第 2 列和第 3 列的三个 NA,以及最近的非 NA 值。这是我的数据和代码:
hh<-structure(list(ka = c(NA, NA, 2, NA, NA, 3, NA, NA, NA, NA),
kb = c(NA, NA, NA, 2, NA, NA, 3, NA, NA, NA), gc = c(NA,
NA, NA, 3, NA, NA, 6, NA, NA, NA), hc = c(NA, NA, 8, NA,
NA, NA, 4, NA, NA, NA)), .Names = c("ka", "kb", "gc", "hc"
), row.names = c(NA, -10L), class = "data.frame")
library(zoo) #na.locf
library(data.table)
setDT(hh)[,`:=`(ka=c(NA,NA,na.locf(ka)),kb=c(NA,NA,NA,na.locf(kb)),gc=c(NA,NA,NA,na.locf(gc)),hc=c(NA,NA,na.locf(hc)))][]
ka kb gc hc
1: NA NA NA NA
2: NA NA NA NA
3: 2 NA NA 8
4: 2 2 3 8
5: 2 2 3 8
6: 3 2 3 8
7: 3 3 6 4
8: 3 3 6 4
9: 3 3 6 4
10: 3 3 6 4
但是,我正在寻找将lapply 与.SD 一起使用,因为每种类型都有两列以上。这可能吗?
【问题讨论】:
-
这也会给出相同的结果
na.locf(hh, na.rm = F) -
@VeerendraGadekar 它会工作,但如果有混合类,我会怀疑输出将类更改为“字符”
-
感谢@VeerendraGadekar
标签: r data.table zoo