gpt4 book ai didi

r - 在 data.table 中使用 na.locf 函数(zoo 包)和 .SD

转载 作者:行者123 更新时间:2023-12-02 06:55:53 24 4
gpt4 key购买 nike

我正在尝试填写所有 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 一起使用的方法,因为每种类型都有两列以上。这可能吗?

最佳答案

尝试

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

或者使用set

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

关于r - 在 data.table 中使用 na.locf 函数(zoo 包)和 .SD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31491976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com