Проблема с использованием функции фильтра для удаления пропущенных значений из набора данных - PullRequest
1 голос
/ 08 ноября 2019

Мне необходимо удалить все наблюдения, где хотя бы одна из этих переменных Loading Date, year of built, vessel type и cargo size содержит пропущенные значения.

    anyNA(CW_data$`Loading Date`) #result is FALSE, which means there aren't missing values
    anyNA(CW_data$`Year Built`) #result is TRUE, there are missing values
    anyNA(CW_data$`Vessel Type`)#result is TRUE, there are missing values
    anyNA(CW_data$`Cargo Size`)#result is TRUE, there are missing values

    CW_data_noNA <- filter(CW_data, is.na('Year Built')==FALSE |
                   is.na('Vessel Type'==FALSE)|
                   is.na('Cargo Size')==FALSE |
                     is.na('Loading Date') == FALSE)

Я пытался с помощью вышеупомянутогокод, но результирующий набор данных идентичен исходному. Может кто-нибудь объяснить, что я делаю не так? большое спасибо, LMC

Ответы [ 3 ]

1 голос
/ 08 ноября 2019

Вы можете использовать filter_at:

CW_data_noNA <- filter_at(CW_data, vars('Year Built', 'Vessel Type', 'Cargo Size', 'Loading Date'), 
                            all_vars(!is.na(.)))

Если вы хотите использовать filter, вместо этого вы можете сделать это:

CW_data_noNA <- CW_data %>% 
                 filter(!is.na('Year Built'), !is.na('Vessel Type'),
                        !is.na('Cargo Size'), !is.na('Loading Date'))

При этом все строки будут оставаться там, где ни один из четырехстолбцы NA. Внутри filter различные условия всегда объединяются с использованием &.

Если вместо этого вы хотите сохранить строку, в которой не все четыре столбца NA одновременно, используйте:

W_data %>% 
   filter(!is.na('Year Built') | !is.na('Vessel Type') |
          !is.na('Cargo Size') | is.na('Loading Date'))
0 голосов
/ 08 ноября 2019

Это может сработать в вашей ситуации

CW_data_noNA <- CW_data %>% drop_na()
0 голосов
/ 08 ноября 2019

Если вы хотите использовать filter, вы можете сделать это следующим образом:

CW_data_noNA <- CW_data %>% 
    filter(!is.na(`Year Built`) & !is.na(`Vessel Type`) &
           !is.na(`Cargo Size`) & !is.na(`Loading Date`)
           )

Когда у вас есть странные имена в столбцах, вы должны использовать обратные символы ``. В общем, я думаю, что лучше избегать пробелов в именах столбцов.

Что касается предоставленного вами кода, is.na уже возвращает логическое значение, поэтому вы можете использовать !is.na вместо is.na() == FALSE. Канал %>% также позволяет вам получить более чистый код!

В следующий раз попробуйте предоставить воспроизводимый пример с вашими данными или некоторыми примерами данных для лучшего понимания.

...