Remove rows where all variables are NA using dplyr

后端 未结 6 1693
北荒
北荒 2020-12-08 07:18

I\'m having some issues with a seemingly simple task: to remove all rows where all variables are NA using dplyr. I know it can be done using base R (Re

6条回答
  •  臣服心动
    2020-12-08 08:09

    Here's another solution that uses purrr::map_lgl() and tidyr::nest():

    library(tidyverse)
    
    dat <- tibble(a = c(1, 2, NA), b = c(1, NA, NA), c = c(2, NA, NA))
    
    any_not_na <- function(x) {
      !all(map_lgl(x, is.na))
    }
    
    
    dat_cleaned <- dat %>%
      rownames_to_column("ID") %>%
      group_by(ID) %>%
      nest() %>%
      filter(map_lgl(data, any_not_na)) %>%
      unnest() %>%
      select(-ID)
    ## Warning: package 'bindrcpp' was built under R version 3.4.2
    
    dat_cleaned
    ## # A tibble: 2 x 3
    ##       a     b     c
    ##     
    ## 1    1.    1.    2.
    ## 2    2.   NA    NA
    

    I doubt this approach will be able to compete with the benchmarks in @hejseb's answer, but I think it does a pretty good job at showing how the nest %>% map %>% unnest pattern works and users can run through it line-by-line to figure out what's going on.

提交回复
热议问题