Тидир заменяет NA, кажется, не работает на векторах даты - PullRequest
1 голос
/ 23 октября 2019
library(tidyr)
df <- tibble(col1 = as.Date(c(NA, "2019-01-01")))
#> # A tibble: 2 x 1
#>   col1      
#>   <date>    
#> 1 NA        
#> 2 2019-01-01

Я работаю с тибблом выше. Я хотел бы заменить NA на строку символов Not Applicable. Но это не работает. Почему? Что мне делать?

df %>% replace_na(list(col1 = "Not Applicable"))
#> Error in charToDate(x) : 
#>   character string is not in a standard unambiguous format

1 Ответ

1 голос
/ 23 октября 2019

"Not applicable" - это character, и мы пытаемся изменить NA в классе Date на character. Некоторые действия не могут быть выполнены, так как они будут отличаться от класса. Вместо этого измените class заранее, а затем выполните replace_na

library(dplyr)
df %>%
   mutate(col1 = as.character(col1)) %>% 
   replace_na(list(col1 = "Not Applicable"))
# A tibble: 2 x 1
#  col1          
#  <chr>         
#1 Not Applicable
#2 2019-01-01

или поместите его в структуру, которая может содержать несколько типов, например list

library(purrr)
df %>% 
   mutate(col1 = map(col1, ~ if(is.na(.x)) "Not Applicable" else .x))
...