在 R 中,如何用前一个字符替换 NA

and*_*ang 5 r na

有一个数据框作为打击(带有 NA 值)

md <- data.frame(cat=c('a','b','d',NA,'E',NA),
                subcat=c('A','C',NA,NA,NA,'D')) 

 cat subcat
1    a      A
2    b      C
3    d   <NA>
4 <NA>   <NA>
5    E   <NA>
6 <NA>      D
Run Code Online (Sandbox Code Playgroud)

我想用前一个字符替换 NA,结果如下。

使用像 'for ...' 这样的循环语句可以做到,但效率不高。有什么公式或包可以做到吗?谢谢!

  cat subcat
1   a      A
2   b      C
3   d      C
4   d      C
5   E      C
6   E      D
Run Code Online (Sandbox Code Playgroud)

www*_*www 6

您可以使用包na.locf中的功能zoo

zoo::na.locf(md)
  cat subcat
1   a      A
2   b      C
3   d      C
4   d      C
5   E      C
6   E      D
Run Code Online (Sandbox Code Playgroud)

或者分别使用filleverything中的tidyrdplyr

library(dplyr)
library(tidyr)

md %>% fill(everything())
#   cat subcat
# 1   a      A
# 2   b      C
# 3   d      C
# 4   d      C
# 5   E      C
# 6   E      D
Run Code Online (Sandbox Code Playgroud)