【问题标题】:R Missing Value Replacement FunctionR 缺失值替换函数
【发布时间】:2014-05-09 07:13:39
【问题描述】:

我有一个缺少值的表,我正在尝试编写一个函数来替换 基于最接近的两个非零值计算的缺失值。

例子:

X  Tom    
1  4.3    
2  5.1    
3  NA    
4  NA    
5  7.4

对于X = 3Tom = 5.1 + (7.4-5.1)/2

对于X = 4Tom = (5.1 + (7.4-5.1)/2) + (7.4-5.1)/2

这个函数已经存在了吗?如果没有,任何建议将不胜感激。

【问题讨论】:

  • 我不知道有什么功能可以做到这一点。 pkg::zoo 中的na.locf 函数将“继承”。
  • 我不太明白你在计算 X = 4 时 Tom 的值是什么意思,你能详细说明一下吗?

标签: r missing-data imputation


【解决方案1】:

一种更常用的方法(但不等同于问题)是使用线性插值:

library(zoo)
df <- data.frame(X = 1:5, Tom = c(4.3, 5.1, NA, NA, 7.4))

na.approx(df)

或样条插值:

na.spline(df)

【讨论】:

  • 谢谢! na.approx() 成功了。您知道算法使用的公式是什么,或者如何查找吗?
  • 它使用线性插值。 R approx 命令在下面做真正的工作。 ?approx
【解决方案2】:

其实 imputeTS 包(我是维护者)为此提供了很好的解决方案。

用移动平均线代替

 na_ma(x, k = 2)

x 是你的输入对象 k 是移动平均窗口

k of 1 表示您只考虑之前和之后的值 k of 2 表示您考虑之前的 2 个值和之后的 2 个值

这个函数可能是最接近所需计算的。 唯一的区别是 imputeTS 方法不会跳过 NA 值。 (根据线程启动器的要求)

但特别是对于长时间的 NA 连胜,这是完全合理的。 1、2、不适用、不适用、不适用、不适用、不适用、不适用、不适用、不适用、不适用、不适用、不适用、14、15、16 (在第 3 位取 2 和 14 的平均值并不是一个好主意)

此外Last Observation Forward(如评论中42所述)

imputeTS::na_locf(x)

插值(G. Grothendieck 也提到过)

imputeTS::na_interpolation(x)

还缺少一些朝同一方向发展的数据替换选项。 如果您有兴趣,这里是 R Journal 中的introduction to the imputeTS package

【讨论】:

    【解决方案3】:

    在这种情况下只需使用循环,其他方法要困难得多。

    for (i in seq_len(nrow(df)) {
      if (is.na(df[i, 'Tom']))
        df[i, 'Tom'] <- ((tmp <- c(0, df$Tom[!is.na(df$Tom)], 0))[i+1] + tmp[i]) / 2 + tmp[i]
    }
    

    示例

    df <- data.frame(X = seq_len(100), Tom = ifelse(runif(100, 0, 1) > 0.5, NA, round(runif(100, 0, 10), 1)))
    head(df)
    # X Tom
    # 1 1  NA
    # 2 1.4
    # 3 3  NA
    # 4 4 3.9
    # 5 5  NA
    for (i in seq_len(nrow(df))) { if (is.na(df[i, 'Tom']))  df[i, 'Tom'] <- ((tmp <- c(0, df$Tom[!is.na(df$Tom)], 0))[i+1] + tmp[i]) / 2 + tmp[i] }
    head(df)
    #  X  Tom
    # 1 1 0.70
    # 2 2 1.40
    # 3 3 4.05
    # 4 4 3.90
    # 5 5 9.05
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2021-09-03
      • 2020-11-14
      • 2020-01-04
      相关资源
      最近更新 更多