Как я могу отфильтровать данные президентских выборов 2016 года, чтобы включить записи с НС при выполнении других условий? - PullRequest
1 голос
/ 08 января 2020

Поэтому я использую пакет dplyr для фильтрации данных о президентских выборах в США 2016 года (в dslabs), чтобы он удовлетворял следующим условиям:

  1. state == US
  2. дата окончания после 2016-10-31
  3. Оценка выше B, но включает записи с NA в классе

Это код, который у меня сейчас есть:

library(dplyr)
library(dslabs)
polls <- polls_us_election_2016 %>% filter(state == "U.S." & enddate >= "2016-10-31"&
                                       grade %in% c("A+", "A", "A-", "B+") | 
                                         is.na(grade))

Но этот код в конечном итоге включает записи с оценкой NA, которые не удовлетворяют первым двум условиям. Как я могу убедиться, что включены только те записи, которые удовлетворяют первым двум условиям?

Ответы [ 2 ]

3 голосов
/ 08 января 2020

Вам необходимо сравнить даты с объектами даты, а не со строками, и сохранить условие для grade отдельно.

library(dplyr)
library(lubridate)
library(dslabs)

polls_us_election_2016 %>%
  filter(state == "U.S." & enddate > ymd('2016-10-31') & 
        (grade %in% c("A+", "A", "A-", "B+") | is.na(grade)))

Или в базе R

subset(polls_us_election_2016, state == "U.S." & enddate > as.Date('2016-10-31') & 
         (grade %in% c("A+", "A", "A-", "B+") | is.na(grade)))
1 голос
/ 08 января 2020

Мы можем использовать data.table

library(data.table)
library(dslabs)
library(lubridate)
as.data.table(polls_us_election_2016)[state ==  "U.S." & 
    enddate > ymd('2016-10-31') &
     (grade %chin%  c("A+", "A", "A-", "B+") | is.na(grade))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...