根据 R 上的其他条目填充缺失值

Rua*_*tel 3 r dplyr tidyverse data-wrangling

我的数据集有input几个缺失值。我必须output使用以下逻辑创建数据集:

\n
    \n
  • b如果、c、 或 中的任何列中存在缺失d,则\n检查相应的a列并使用从该行到特定列的\n相应值填充缺失的部分。
  • \n
\n

我尝试使用_join来自的函数来做到这一点dplyr,但没有成功。

\n

我可以手动执行此操作,但此选项不可行,因为我有一个包含多个此类实例的大数据集。

\n

输入

\n
library(dplyr)\n\ninput <- tibble( a = rep(c("A", "B", "C", "D"),2 ),\n        b = c(1:3, NA, rep(NA,4)),\n        c = c(21:28),\n        d = c(rep(NA,4), 54, NA, 34,11)) %>% \n  arrange(a)\n
Run Code Online (Sandbox Code Playgroud)\n

输入视图

\n
# A tibble: 8 \xc3\x97 4\n#  a         b     c     d\n#  <chr> <int> <int> <dbl>\n#1 A         1    21    NA\n#2 A        NA    25    54\n#3 B         2    22    NA\n#4 B        NA    26    NA\n#5 C         3    23    NA\n#6 C        NA    27    34\n#7 D        NA    24    NA\n#8 D        NA    28    11\n
Run Code Online (Sandbox Code Playgroud)\n

输出 - 预期视图

\n
# A tibble: 8 \xc3\x97 4\n#   a         b     c     d\n# <chr> <int> <int> <dbl>\n# 1 A         1    21    54\n# 2 A         1    25    54\n# 3 B         2    22    NA\n# 4 B         2    26    NA\n# 5 C         3    23    34\n# 6 C         3    27    34\n# 7 D        NA    24    11\n# 8 D        NA    28    11\n
Run Code Online (Sandbox Code Playgroud)\n

Rui*_*das 5

使用na.locf包中的函数zoo向前或相反方向进行最后一次观察。

\n
suppressPackageStartupMessages(library(dplyr))\n\ninput <- tibble( a = rep(c("A", "B", "C", "D"),2 ),\n                 b = c(1:3, NA, rep(NA,4)),\n                 c = c(21:28),\n                 d = c(rep(NA,4), 54, NA, 34,11)) %>% \n  arrange(a)\n\ninput %>%\n  group_by(a) %>%\n  mutate(across(b:d, zoo::na.locf, na.rm =  FALSE)) %>%\n  mutate(across(b:d, zoo::na.locf, na.rm =  FALSE, fromLast = TRUE))\n#> # A tibble: 8 \xc3\x97 4\n#> # Groups:   a [4]\n#>   a         b     c     d\n#>   <chr> <int> <int> <dbl>\n#> 1 A         1    21    54\n#> 2 A         1    25    54\n#> 3 B         2    22    NA\n#> 4 B         2    26    NA\n#> 5 C         3    23    34\n#> 6 C         3    27    34\n#> 7 D        NA    24    11\n#> 8 D        NA    28    11\n
Run Code Online (Sandbox Code Playgroud)\n

由reprex 包于 2022 年 5 月 14 日创建(v2.0.1)

\n