在 data.table 中使用带有 .SD 的 na.locf 函数(zoo 包) [英] Use of na.locf function (zoo package) with .SD in data.table

查看:36
本文介绍了在 data.table 中使用带有 .SD 的 na.locf 函数(zoo 包)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试填写所有 NA,不包括第 1 列和第 4 列的前两个 NA,以及第 2 列和第 3 列的三个 NA,以及最近的非 NA 值.这是我的数据和代码:

I am trying to fill out all NA's excluding the first two NA's for cols 1 and 4 and three NA's for cols 2 and 3 with most recent non-NA value . Here is my data and code:

  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 一起使用,因为每种类型都有两列以上.这可能吗?

However, I am looking for use of lapply with .SD as I have more than two columns for each type. Is this possible?

推荐答案

试试

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

或者使用设置

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

这篇关于在 data.table 中使用带有 .SD 的 na.locf 函数(zoo 包)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆