如何用丢失的前后值的平均值填充向量中的丢失的值

问题描述 投票:0回答:1

目前,我正在尝试在R中的向量中估算值。的归责是。

  • 查找所有NA值
  • 然后检查它们前后是否具有现有值
  • 还检查NA之后的值是否大于NA之前的值
  • 如果满足条件,请使用之前的值计算平均值之后。
  • 用估算值替换NA值
# example one
input_one = c(1,NA,3,4,NA,6,NA,NA)

# example two
input_two = c(NA,NA,3,4,5,6,NA,NA)

# example three
input_three = c(NA,NA,3,4,NA,6,NA,NA)

我开始编写代码来检测可以被推算。但是我坚持以下几点。

# incomplete function to detect the values
sapply(split(!is.na(input[c(rbind(which(is.na(c(input)))-1, which(is.na(c(input)))+1))]), 
             rep(1:(length(!is.na(input[c(which(is.na(c(input)))-1, which(is.na(c(input)))+1)]))/2), each = 2)), all)

但是,这只会检测可能是可归因的,并且仅适用于示例一。它不完整且不幸的是,它很难阅读和理解。

在此方面的任何帮助将不胜感激。

r imputation
1个回答
0
投票

我们可以使用dplyrlaglead功能:

input_three = c(NA,NA,3,4,NA,6,NA,NA)

library(dplyr)
ifelse(is.na(input_three) & lead(input_three) > lag(input_three),
       (lag(input_three)  + lead(input_three))/ 2,
       input_three)

拒绝:

[1] NA NA  3  4  5  6 NA NA
© www.soinside.com 2019 - 2024. All rights reserved.