代码之家  ›  专栏  ›  技术社区  ›  Joachim Schork

用序列替换值之间的NAS

  •  0
  • Joachim Schork  · 技术社区  · 7 年前

    我有一个带有NA值的数据帧。我想用NAS前后值之间的序列替换这些NAS。

    请考虑以下示例:

    # Example data
    df <- data.frame(x1 = c(5, NA, NA, 10, NA),
                     x2 = c(NA, 2, NA, - 10, NA),
                     x3 = c(10, NA, 15, NA, 20))
    df
    # x1  x2 x3
    #  5  NA 10
    # NA   2 NA
    # NA  NA 15
    # 10 -10 NA
    # NA  NA 20
    

    两个值之间的NAS应替换为序列。开始或结束时的NAS应保持不可用:

    # Expected output
    
    #       x1   x2     x3
    #        5   NA     10
    # 6.666667    2   12.5
    # 8.333333   -4     15
    #       10  -10   17.5
    #       NA   NA     20
    

    如何在两个值之间自动替换NAS?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Emily Kothe    7 年前

    动物园中的na.approx函数很容易进行插值。

    df <- data.frame(x1 = c(5, NA, NA, 10, NA),
                     x2 = c(NA, 2, NA, - 10, NA),
                     x3 = c(10, NA, 15, NA, 20))
    df
    #>   x1  x2 x3
    #> 1  5  NA 10
    #> 2 NA   2 NA
    #> 3 NA  NA 15
    #> 4 10 -10 NA
    #> 5 NA  NA 20
    
    zoo::na.approx(df)
    #>             x1  x2   x3
    #> [1,]  5.000000  NA 10.0
    #> [2,]  6.666667   2 12.5
    #> [3,]  8.333333  -4 15.0
    #> [4,] 10.000000 -10 17.5
    #> [5,]        NA  NA 20.0
    

    reprex package (v0.2.0)。

        2
  •  1
  •   Steffen Moritz    7 年前

    这里有一个解决方案 密码者 包裹:

    # Example data
    df <- data.frame(x1 = c(5, NA, NA, 10, NA),
                 x2 = c(NA, 2, NA, - 10, NA),
                 x3 = c(10, NA, 15, NA, 20))
    
    library("imputeTS")
    na.interpolation(df, option = "linear)
    

    对于插补::na.interpolation,可以通过参数选项(option=“spline”或option=“stine”)选择不同的插补方法。