#r #filter #dplyr #filtering #na
#r #Фильтр #dplyr #фильтрация #na
Вопрос:
Я пытаюсь использовать filter_all() от dplyr для получения всех строк, в которых нет отсутствующих данных. Я использую dplyr, встроенный в набор данных starwars. Когда я использую этот код для получения результата, в котором есть какие-либо пропущенные значения, он работает без проблем:
library(dplyr)
data("starwars")
rows_with_NAs <- starwars %>%
filter_all(any_vars(is.na(.)))
Однако, если я попытаюсь найти строки, в которых нет пропущенных значений с помощью этого кода:
rows_without_NAs <- starwars %>%
filter_all(any_vars(!is.na(.)))
Я все еще получаю строки с NAs.
head(rows_without_NAs)
Почему это и как я могу это исправить?
Спасибо!
Комментарии:
1. Вы ищете любую переменную, которая имела бы не пропущенное значение. Я думаю, вы хотите переместить отрицание наружу —
!any_vars(is.na(.))
2. @thelatemail, когда я пытаюсь это сделать, я получаю следующее сообщение об ошибке: Ошибка в is_quosure(e2) : аргумент «e2» отсутствует, значение по умолчанию отсутствует. Если вы сможете заставить это работать, не могли бы вы прислать мне свой синтаксис? Спасибо!
Ответ №1:
tidyr
для этого есть drop_na()
оператор.
library(tidyverse)
data("starwars")
rows_without_NAs <- starwars %>%
drop_na()
Комментарии:
1. Я не знал об этой функции! Одна небольшая поправка для тех, кто в будущем будет искать это решение, заключается в том, что drop_na() находится в tidyr, а не dplyr, но работает все равно. Спасибо, @Simon Woodward!
2. Одна из особенностей программирования в наши дни заключается в том, что существует так много библиотек, что, вероятно, есть что-то, что позволяет делать то, что вы хотите, но часто это действительно трудно найти.