R:如何按行用最新值替换 NA

R: How to replace NA with most recent value by row

假设我有以下 df:

df <- data.frame(day = c(1:8), value= c(10, 25, NA, 7, NA, NA, 20, NA))

    Day     Value
1     1        10
2     2        25
3     3        NA
4     4         7
5     5        NA
6     6        NA
7     7        20
8     8        NA

我正在寻找一种解决方案,用最近的非 NA 值替换 'Value' 列中的 NA。所需的输出将是:

    Day     Value
1     1        10
2     2        25
3     3        25
4     4         7
5     5         7
6     6         7
7     7        20
8     8        20

有一系列的非基础解决方案:

zoo::na.locf(df$Value)
data.table::nafill(df$Value)

naniar 也是一个完全围绕 NA 处理设计的包。

base中你可以使用avecumsum组合来填充。

df$value <- ave(df$value, cumsum(!is.na(df$value)), FUN = function(x) x[1])
df
#  day value
#1   1    10
#2   2    25
#3   3    25
#4   4     7
#5   5     7
#6   6     7
#7   7    20
#8   8    20