r - 如何用前一列中的最后一个非缺失值填充 NA?

标签 r dplyr na

我的 df 包含一个包含所有缺失值的列 (V5):

> df
# A tibble: 7 × 5
     V1    V2    V3    V4 V5   
  <dbl> <dbl> <dbl> <dbl> <lgl>
1  1.19  2.45  0.83  0.87 NA   
2  1.13  0.79  0.68  5.43 NA   
3  1.18  1.09  1.04 NA    NA   
4  1.11  1.1   4.24 NA    NA   
5  1.16  1.13 NA    NA    NA   
6  1.18 NA    NA    NA    NA   
7  1.44 NA     9.17 NA    NA

我想用前列中最接近的非缺失值填充 V5 列:

> df1
# A tibble: 7 × 5
     V1    V2    V3    V4    V5
  <dbl> <dbl> <dbl> <dbl> <dbl>
1  1.19  2.45  0.83  0.87  0.87
2  1.13  0.79  0.68  5.43  5.43
3  1.18  1.09  1.04 NA     1.04
4  1.11  1.1   4.24 NA     4.24
5  1.16  1.13 NA    NA     1.13
6  1.18 NA    NA    NA     1.18
7  1.44 NA     9.17 NA     9.17

similar帖子,但没有人帮助解决这个问题。因此,任何线索将不胜感激。

这是输出:

structure(list(V1 = c(1.19, 1.13, 1.18, 1.11, 1.16, 1.18, 1.44
), V2 = c(2.45, 0.79, 1.09, 1.1, 1.13, NA, NA), V3 = c(0.83, 
0.68, 1.04, 4.24, NA, NA, 9.17), V4 = c(0.87, 5.43, NA, NA, NA, 
NA, NA), V5 = c(NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_)), row.names = c(NA, 
-7L), class = c("tbl_df", "tbl", "data.frame"))

最佳答案

你可以使用

library(dplyr)
df %>% 
  mutate(V5 = coalesce(V4, V3, V2, V1))

返回

# A tibble: 7 x 5
     V1    V2    V3    V4    V5
  <dbl> <dbl> <dbl> <dbl> <dbl>
1  1.19  2.45  0.83  0.87  0.87
2  1.13  0.79  0.68  5.43  5.43
3  1.18  1.09  1.04 NA     1.04
4  1.11  1.1   4.24 NA     4.24
5  1.16  1.13 NA    NA     1.13
6  1.18 NA    NA    NA     1.18
7  1.44 NA     9.17 NA     9.17

或更一般的来自 https://github.com/tidyverse/funs/issues/54#issuecomment-892377998

df %>% 
  mutate(V5 = do.call(coalesce, rev(across(-V5))))

https://github.com/tidyverse/funs/issues/54#issuecomment-1096449488

df %>% 
  mutate(V5 = coalesce(!!!rev(select(., -V5))))

关于r - 如何用前一列中的最后一个非缺失值填充 NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71984320/

相关文章:

r - 将 purrr 和 ggplot 与 group_by 和 Nest() 结合使用时获取绘图标题

如果日期低于 R 中特定行的日期,则返回 NA

python - 从 pandas 数据框中选择行,其中指定列不全为 NaN

R Blogdown Hugo 学术主题未渲染站点

r - 在函数中使用 dplyr::filter()

r - 寻找具有所有相等元素的最大方子矩阵

python - fillna() 产生 NaN 值

r - 在 R 中,如何定义模型对比来比较相对于公共(public)控件的两个条件?

regex - 为什么不能在断言后面的零宽度中使用重复量词?

r - 使用需要带有 mutate 和 group_by 的向量的自定义函数