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中你可以使用ave
和cumsum
组合来填充。
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
假设我有以下 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中你可以使用ave
和cumsum
组合来填充。
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