【问题标题】:mean-before-after imputation in RR中的平均前后插补
【发布时间】:2013-02-24 20:04:13
【问题描述】:

我是 R 新手。我的问题是如何使用缺失数据点前后的平均值来估算缺失值?

例子;

使用每个 NA 的上下平均值作为估算值​​。

-第 3 行的平均值为 38.5

-第 7 行的平均值为 32.5

age
52.0
27.0
NA
23.0
39.0
32.0
NA
33.0
43.0

谢谢。

【问题讨论】:

  • 当你说 27 和 23 的平均值是 38.5 时,我假设你犯了一个错误。
  • 是的,正确的平均值是 25.0。
  • 如果一个 NA 与另一个 NA 相邻怎么办?

标签: r missing-data imputation


【解决方案1】:

这是您可以采用的基本手动方法:

age <- c(52, 27, NA, 23, 39, 32, NA, 33, 43)
age[is.na(age)] <- rowMeans(cbind(age[which(is.na(age))-1], 
                                  age[which(is.na(age))+1]))
age
# [1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0

或者,因为您似乎只有一列data.frame

mydf <- data.frame(age = c(52, 27, NA, 23, 39, 32, NA, 33, 43))

mydf[is.na(mydf$age), ] <- rowMeans(
  cbind(mydf$age[which(is.na(mydf$age))-1],
        mydf$age[which(is.na(mydf$age))+1]))

【讨论】:

    【解决方案2】:

    只是另一种方式:

    age <- c(52, 27, NA, 23, 39, 32, NA, 33, 43)
    age[is.na(age)] <- apply(sapply(which(is.na(age)), "+", c(-1, 1)), 2, 
                             function(x) mean(age[x]))
    age
    ## [1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0
    

    【讨论】:

      【解决方案3】:

      这里使用来自 zoo 包的 from na.locf 的解决方案,它将每个 NA 替换为它之前或之后的最近的非 NA。

      0.5*(na.locf(x,fromlast=TRUE) + na.locf(x))
      [1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0
      

      如果你有多个连续的 NA,这里的优势。

      x <- c(52, 27, NA, 23, 39, NA, NA, 33, 43)
      0.5*(na.locf(x,fromlast=TRUE) + na.locf(x))
      [1] 52 27 25 23 39 36 36 33 43
      

      编辑 rev 参数已弃用,因此我将其替换为 fromlast

      【讨论】:

      • 感谢您的帮助,我尝试使用上述方法,但没有得到与您相同的答案。我得到的估算值是 NA 之前的值,而不是之前的平均值在 NA 之后。我该如何解决这个问题?再次感谢。
      • 如果我们连续有一些“NA”,例如(52,27,NA,NA,23,NA,NA,NA,33,43),我们该怎么办?
      【解决方案4】:

      您正在寻找移动平均插补 - 您可以为此使用 imputeTSna_ma 函数。

      library(imputeTS)
      x <- c(52, 27, NA, 23, 39, NA, NA, 33, 43)
      na_ma(x, k=1, weighting = "simple")
      

      [1] 52.00000 27.00000 25.00000 23.00000 39.00000 31.66667 38.33333 33.00000 43.00000

      这会产生所需的结果。 使用 k 参数,您可以指定计算时要考虑每边的邻居数。

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 2017-05-04
        • 1970-01-01
        • 2013-06-22
        • 2022-01-12
        • 2012-10-18
        • 1970-01-01
        • 2019-01-15
        相关资源
        最近更新 更多