R locf和nocb功能

R locf和nocb功能,r,missing-data,imputation,locf,R,Missing Data,Imputation,Locf,我想创建一个以此为基础的函数: locf <- function(x) { a <- x[1] for (i in 2:length(x)) { if (is.na(x[i])) x[i] <- a else a <- x[i] } return(x) } locf如果您通过“第一次缺失观察”引用列表的第一个元素,则以下操作有效: my_function <- function(my_list) { for(i in 1:len

我想创建一个以此为基础的函数:

locf <- function(x) {
  a <- x[1]
  for (i in 2:length(x)) {
    if (is.na(x[i])) x[i] <- a
    else a <- x[i]
  }
  return(x)
}

locf如果您通过“第一次缺失观察”引用列表的第一个元素,则以下操作有效:

my_function <- function(my_list) {
  for(i in 1:length(my_list)) {
    if(is.na(my_list[i])) {
      if(i == 1) {
        my_list[i] <- my_list[i + 1]
      } else {
        print(i)
        my_list[i] <- my_list[i - 1]
      }
    }
  }
  return(my_list)
}

my_function如果您通过“first missing observation”引用列表的第一个元素,则以下操作将起作用:

my_function <- function(my_list) {
  for(i in 1:length(my_list)) {
    if(is.na(my_list[i])) {
      if(i == 1) {
        my_list[i] <- my_list[i + 1]
      } else {
        print(i)
        my_list[i] <- my_list[i - 1]
      }
    }
  }
  return(my_list)
}

my_function这将第一个na设置为下一个值,然后通过其locf值重置后续na

#library(zoo)
Nocb1.locf <- function (x){ wh1st <- which(is.na(x))[1]; 
   x[wh1st] <- x[wh1st + 1]
   x <- zoo::na.locf(x) }
#图书馆(动物园)

Nocb1.locf这将第一个na设置为下一个值,然后通过其locf值重置后续na

#library(zoo)
Nocb1.locf <- function (x){ wh1st <- which(is.na(x))[1]; 
   x[wh1st] <- x[wh1st + 1]
   x <- zoo::na.locf(x) }
#图书馆(动物园)

Nocb1.locf确切地说,该函数存在于输入数据包中:

library(imputeTS)
imputeTS::na.locf(x, option = "locf", na.remaining = "rev")

使用na.remaining参数,您可以选择如何处理剩余的后续NAs。您可以在“rev”(反向)、“mean”或“keep”之间进行选择。选择“rev”会在开始时为locf无法填充的所有NAs取消nocb。如果您首先选择option=“nocb”而不是“locf”,那么当然会用“locf”填充后面的NAs

该函数确实存在于输入数据包中:

library(imputeTS)
imputeTS::na.locf(x, option = "locf", na.remaining = "rev")

使用na.remaining参数,您可以选择如何处理剩余的后续NAs。您可以在“rev”(反向)、“mean”或“keep”之间进行选择。选择“rev”会在开始时为locf无法填充的所有NAs取消nocb。如果您首先选择option=“nocb”而不是“locf”,那么当然会用“locf”填充后面的NAs

有几个函数可以做到这一点。下面是我为Rcpp中的
MESS
包编写的一个。首先
filldown
然后反转向量并再次运行:
rev(MESS::filldown(rev(MESS::filldown(data)))
。你甚至可以用你自己的函数做同样的双反转,有几个函数可以做到这一点。下面是我为Rcpp中的
MESS
包编写的一个。首先
filldown
然后反转向量并再次运行:
rev(MESS::filldown(rev(MESS::filldown(data)))
。你甚至可以用你自己的函数做同样的双反转。谢谢!我知道这个函数,但我不知道为什么我得到的插补与我的_函数不同。我想你把它与package zoo的locf函数混淆了。请尝试上面的代码,它会给出相同的结果。谢谢!我知道这个函数,但我不知道为什么我得到的插补与我的_函数不同。我想你把它与package zoo的locf函数混淆了。请尝试上面的代码,它会给出相同的结果。非常感谢!第一个代码对我来说太棒了!!!如果我有不同的数据,比如:datadatayou不会更改任何内容…这是一个函数…您只需更改输入(只需为函数提供另一个my_列表)非常感谢!第一个代码对我来说太棒了!!!如果我有不同的数据,比如:datadatayou不会更改任何内容…这是一个函数…您只需更改输入(只需为函数提供另一个my_列表)