0

我正在尝试编写一行简单的代码来检测数据框中的哪些条目不正确。考虑以下示例:

author   val1   val2   val3   val4
A         1      B      1      NA
A         NA     NA     NA     NA
NA        2      B      NA     B
NA        NA     NA     NA     B
NA        NA     NA     NA     NA
A         2      A      NA     B

一行总是需要填写作者,但这有时会被遗忘。此外,有时第 2 行填写了作者,但意外的是其余数据输入到了第 3 行。

我想要的是过滤具有NA作者的行,然后过滤任何列中的任何数据条目。因此,我对上述示例的预期输出将是:

author   val1   val2   val3   val4
NA        2      B      NA     B
NA        NA     NA     NA     B

为作者过滤带有 NA 的行很容易,但我不知道下一步该做什么。到目前为止我的代码:

 df %>%
  filter(
    is.na(author)
    ) %>%  
  filter(
    across(
      .cols = everything(),
      .fns = ~ !is.na(.x)
    )
  ) 

我觉得我已经很接近了,但是经过几个小时的尝试和查看堆栈后,我的代码仍然向我返回空数据帧。我更喜欢 tidyverse 语法的解决方案,但非常感谢任何帮助。

4

1 回答 1

1

我的代码效率不高,但似乎有效。

library(stringr)
library(rebus)
library(tidyverse)
library(magrittr)

df <- tibble(author = c('A', 'A', NA, NA, NA, 'A'),
             val1   = c(1, NA, 2, NA, NA, 2),
             val2   = c('B', NA, 'B', NA, NA, 'A'),
             val3   = c(1, NA, NA, NA, NA , NA),
             val4   = c(NA, NA, 'B', 'B', NA, 'B'))

df_na <- filter(df, is.na(author)) 

#map and str_which will cover each column

index <- map(df_na,~ str_which(.x, pattern = rebus::or(ANY_CHAR, DGT))) %>% 
    keep(~ length(.x) != 0) %>% #filter any columns that are all NA
    unlist() %>%
    unique()

df_na %>% extract(index, )
于 2021-05-21T17:36:51.630 回答