Rua*_*tel 3 r dplyr tidyverse data-wrangling
我的数据集有input几个缺失值。我必须output使用以下逻辑创建数据集:
b如果、c、 或 中的任何列中存在缺失d,则\n检查相应的a列并使用从该行到特定列的\n相应值填充缺失的部分。我尝试使用_join来自的函数来做到这一点dplyr,但没有成功。
我可以手动执行此操作,但此选项不可行,因为我有一个包含多个此类实例的大数据集。
\nlibrary(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)\nRun Code Online (Sandbox Code Playgroud)\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\nRun Code Online (Sandbox Code Playgroud)\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\nRun Code Online (Sandbox Code Playgroud)\n
使用na.locf包中的函数zoo向前或相反方向进行最后一次观察。
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\nRun Code Online (Sandbox Code Playgroud)\n由reprex 包于 2022 年 5 月 14 日创建(v2.0.1)
\n