Как отфильтровать кадр данных без потери строк 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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *