Как правильно игнорировать NA при сравнении двух дат? - PullRequest
0 голосов
/ 22 января 2020

У меня есть две переменные даты

ID Date1       Date2      
1  2019-09-10  2019-09-09 
1  2019-12-11  2019-12-01
1  NA          2019-12-08
2  2019-09-11  2019-09-25
2  2019-11-05  2019-11-15
2  2019-12-05  NA
3  2019-09-19  2019-09-11
3  2019-10-22  2019-10-17

Я хочу сравнить, если Дата 1 после даты 2, запустив коды ниже

df %>% 
group_by(id) %>% 
mutate(Result = ifelse(!is.na(Date1) < !is.na(Date2), "Yes", 
"No")) 

Что я хочу:

ID Date1       Date2       Result
1  2019-09-10  2019-09-09  No
1  2019-12-11  2019-12-01  No
1  NA          2019-12-08  NA
2  2019-09-11  2019-09-25  Yes
2  2019-11-05  2019-11-15  Yes
2  2019-12-05  NA          NA
3  2019-09-19  2019-09-11  No
3  2019-10-22  2019-10-17  No

Если я запускаю это, я получаю "Да" для тех, которые содержат NA ... Я не хочу удалять NA, потому что мне все еще нужна эта недостающая информация позже. Я не уверен, почему! Is.na () не работает в этом случае. Буду признателен за любую помощь!

  • Я также попробовал difftime (), и то же самое произошло

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Я думаю, вы можете удалить is.na() в вашем ifelse() заявлении, в котором будет отсутствующая информация

df %>% 
group_by(id) %>% 
mutate(Result = ifelse(Date1 < Date2, "Yes", "No")) 
0 голосов
/ 22 января 2020

Вы сравниваете два логических вектора друг с другом, !is.na(Date1) и !is.na(Date2). Поскольку TRUE и FALSE могут быть приведены к числовым c векторам, неравенство сравнивает каждое значение, где NA содержащие ячейки будут оцениваться как TRUE и, следовательно, будут "больше", чем ячейки, не содержащие NA. Вам просто нужно удалить вызов is.na, сравнение будет поддерживать NA для Result в строках, где Date1 или Date2 имеет значение NA.

Обратите внимание, что вам не нужно использовать group_by здесь, так как вы работаете с каждой строкой по отдельности.

df %>%
  mutate(Result = ifelse(Date1 < Date2, "Yes", "No"))
#> # A tibble: 8 x 4
#>      ID Date1      Date2      Result
#>   <dbl> <date>     <date>     <chr> 
#> 1     1 2019-09-10 2019-09-09 No    
#> 2     1 2019-12-11 2019-12-01 No    
#> 3     1 NA         2019-12-08 <NA>  
#> 4     2 2019-09-11 2019-09-25 Yes   
#> 5     2 2019-11-05 2019-11-15 Yes   
#> 6     2 2019-12-05 NA         <NA>  
#> 7     3 2019-09-19 2019-09-11 No    
#> 8     3 2019-10-22 2019-10-17 No
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...