Как использовать dplyr для фильтрации NA в нескольких столбцах

Я пытаюсь отфильтровать строки со значениями NA по нескольким столбцам. Строку следует отбрасывать только в том случае, если все интересующие столбцы — NA.

Сценарий такой же, как в этом вопросе (но у меня недостаточно репутации, чтобы оставить комментарий): фильтрация фрейма данных на основе NA по нескольким столбцам

Одно из решений — использовать:

library(dplyr)
df_non_na <- df %>% filter_at(vars(type,company),all_vars(!is.na(.)))

Поскольку filter_at обесценивается в dplyr, как я могу использовать filter и through для достижения аналогичного результата?

Отвечает ли это на ваш вопрос? фильтр dplyr с условием для нескольких столбцов   —  person etrowbridge    schedule 28.02.2021

См. также:  Как читать прямоугольник, окруженный пробелами, используя readxl
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. etrowbridge

    Мы можем использовать across, чтобы перебирать столбцы type, company и возвращать строки, которые не имеют NA в указанных столбцах.

    library(dplyr)
    df %>%
         filter(across(c(type, company), ~ !is.na(.)))
    #     id  type company
    #1  3 North    Alex
    #2 NA North     BDA
    

    С filter есть две опции, похожие на all_vars/any_vars, используемые с filter_at/filter_all

    df %>%
      filter(if_any(c(company, type), ~ !is.na(.)))
    #  id  type company
    #1  2  <NA>     ADM
    #2  3 North    Alex
    #3  4 South    <NA>
    #4 NA North     BDA
    #5  6  <NA>      CA
    

    Или используя if_all

    df %>%
      filter(if_all(c(company, type), ~ !is.na(.)))
    #   id  type company
    #1  3 North    Alex
    #2 NA North     BDA
    

    данные

    df <- structure(list(id = c(1L, 2L, 3L, 4L, NA, 6L), type = c(NA, NA, 
    "North", "South", "North", NA), company = c(NA, "ADM", "Alex", 
    NA, "BDA", "CA")), class = "data.frame", row.names = c(NA, -6L
    ))
    

    Есть ли способ изменить это так, чтобы удалялись только строки с несколькими значениями NA? Например, чтобы была удалена только первая строка в df (где и тип, и компания — NA). person etrowbridge; 28.02.2021

    @etrowbridge, пожалуйста, проверьте обновленное решение person etrowbridge; 28.02.2021

    Благодарность! Вот и все. (используя if_any) person etrowbridge; 28.02.2021

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: