Как отфильтровать кадр данных без потери строк na с помощью dplyr
Вы можете использовать следующий базовый синтаксис для фильтрации фрейма данных без потери строк, содержащих значения NA, с помощью функций в пакетах dplyr и Tidyr в R:
library (dplyr) library (tidyr) #filter for rows where team is not equal to 'A' (and keep rows with NA) df <- df %>% filter((team != ' A ') %>% replace_na( TRUE ))
Обратите внимание, что эта формула использует функцию replace_na() из пакета Tidyr для преобразования значений NA в TRUE, чтобы они не удалялись из фрейма данных во время фильтрации.
В следующем примере показано, как использовать этот синтаксис на практике.
Пример. Фильтрация фрейма данных без потери строк NA с помощью dplyr
Предположим, у нас есть следующий кадр данных в R, содержащий информацию о различных баскетболистах:
#create data frame df <- data. frame (team=c('A', NA, 'A', 'B', NA, 'C', 'C', 'C'), points=c(18, 13, 19, 14, 24, 21, 20, 28), assists=c(5, 7, 17, 9, 12, 9, 5, 12)) #view data frame df team points assists 1 to 18 5 2 <NA> 13 7 3 A 19 17 4 B 14 9 5 <NA> 24 12 6 C 21 9 7 C 20 5 8 C 28 12
Теперь предположим, что мы используем функцию filter() из пакета dplyr для фильтрации фрейма данных, чтобы он содержал только те строки, значение которых в столбце команды не равно A:
library (dplyr) #filter for rows where team is not equal to 'A' df <- df %>% filter(team != ' A ') #view updated data frame df team points assists 1 B 14 9 2 C 21 9 3 C 20 5 4 C 28 12
Обратите внимание, что каждая строка, в которой значение в столбце «Команда» равно A, была отфильтрована, включая строки, в которых значение в столбце « Команда» равно NA.
Если мы хотим отфильтровать строки, где команда равна A, и сохранить строки со значениями NA, мы можем использовать следующий синтаксис:
library (dplyr) library (tidyr) #filter for rows where team is not equal to 'A' (and keep rows with NA) df <- df %>% filter((team != ' A ') %>% replace_na( TRUE )) #view updated data frame df team points assists 1 <NA> 13 7 2 B 14 9 3 <NA> 24 12 4 C 21 9 5 C 20 5 6 C 28 12
Обратите внимание, что каждая строка, в которой значение в столбце «Команда» равно A, была отфильтрована, но мы сохранили строки, в которых значение в столбце «Команда» равно NA.
Примечание . Полную документацию по функции Tidyr replace_na() можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные функции в dplyr:
Как фильтровать по номеру строки с помощью dplyr
Как фильтровать по нескольким условиям с помощью dplyr
Как использовать фильтр «не включено» в dplyr