我有一个数据集input,其中有几个缺少的值.我必须用以下逻辑创建数据集output:

  • 如果第bcd列中的任何一列中缺少

我试图用dplyr中的_join个函数来实现这一点,但没有成功.

我可以手动完成,但这个选项不适用,因为我有一个包含多个这样的实例的 Big Data 集.

Input

library(dplyr)

input <- tibble( a = rep(c("A", "B", "C", "D"),2 ),
        b = c(1:3, NA, rep(NA,4)),
        c = c(21:28),
        d = c(rep(NA,4), 54, NA, 34,11)) %>% 
  arrange(a)

输入视图

# A tibble: 8 × 4
#  a         b     c     d
#  <chr> <int> <int> <dbl>
#1 A         1    21    NA
#2 A        NA    25    54
#3 B         2    22    NA
#4 B        NA    26    NA
#5 C         3    23    NA
#6 C        NA    27    34
#7 D        NA    24    NA
#8 D        NA    28    11

Output - expected view

# A tibble: 8 × 4
#   a         b     c     d
# <chr> <int> <int> <dbl>
# 1 A         1    21    54
# 2 A         1    25    54
# 3 B         2    22    NA
# 4 B         2    26    NA
# 5 C         3    23    34
# 6 C         3    27    34
# 7 D        NA    24    11
# 8 D        NA    28    11

推荐答案

使用软件包zoo中的功能na.locf向前或反向进行最后一次观察.

suppressPackageStartupMessages(library(dplyr))

input <- tibble( a = rep(c("A", "B", "C", "D"),2 ),
                 b = c(1:3, NA, rep(NA,4)),
                 c = c(21:28),
                 d = c(rep(NA,4), 54, NA, 34,11)) %>% 
  arrange(a)

input %>%
  group_by(a) %>%
  mutate(across(b:d, zoo::na.locf, na.rm =  FALSE)) %>%
  mutate(across(b:d, zoo::na.locf, na.rm =  FALSE, fromLast = TRUE))
#> # A tibble: 8 × 4
#> # Groups:   a [4]
#>   a         b     c     d
#>   <chr> <int> <int> <dbl>
#> 1 A         1    21    54
#> 2 A         1    25    54
#> 3 B         2    22    NA
#> 4 B         2    26    NA
#> 5 C         3    23    34
#> 6 C         3    27    34
#> 7 D        NA    24    11
#> 8 D        NA    28    11

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

R相关问答推荐

使用gggplot 2在R中重新调整面板和y轴文本大小

如何使用geom_sf在边界显示两种 colored颜色 ?

编码变量a、b、c以匹配来自另一个数据点的变量x

在R中查找每个组不同时间段的总天数

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

删除具有相同标题的tabPanel(shinly)

如何在分组条形图中移动相关列?

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

R:从geom_ol()中删除轮廓并导出为pdf

从多个可选列中选取一个值到一个新列中

如何创建累加到现有列累计和的新列?

如何使用同比折线图中的个别日

使用ggplot2中的sec_axis()调整次轴

在R中的数据框上使用Apply()函数时,如何保留非数字列?

快速合并R内的值

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

基于R中的引用将向量值替换为数据框列的值

如何使用list_rind在列表中保留已命名但不包含第0行的记录?

基于已有ID列创建唯一ID

R:部分修改矩阵对角线的有效方法