Use of na.locf function (zoo package) with .SD in data.table

六眼飞鱼酱① 提交于 2019-12-01 23:50:38

Try

 setDT(hh)[, lapply(.SD, function(x) na.locf(x, na.rm=FALSE))]

Or use set

  for(j in seq_along(hh)){
    set(hh, i=NULL, j=j, value= na.locf(hh[[j]], na.rm=FALSE))
  }

You don't need lapply. This is sufficient:

DT <- as.data.table(hh)
DT[, na.locf(.SD, na.rm = FALSE)]

giving:

    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

This will also work:

DT[, lapply(.SD, na.locf0)]

You can use setnafill, available from data.table >= 1.12.3:

setnafill(hh, type = "locf")
hh
#    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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!