Search code examples
rreadr

Using locale's date_format in readr


How do I correctly set locale's date_format to work with cols() from readr?

Instead of specifying the date format for every column:

df <- read_csv2(my_file,
                col_types = cols(.default = '?',
                                 my_date = col_date(format = '%d.%m.%Y')))

I want to specify it once. cols()'s documentation says:

col_date(format = "") [D]: with the locale's date_format.

so I tried:

locale(date_format = '%d.%m.%Y')

df <- read_csv2(my_file,
                col_types = cols(.default = '?',
                                 my_date = 'D'))

But this throws the warning (received with problems()):

expected: <chr> date in ISO8601
actual: <chr> 01.01.2000

Solution

  • You have to pass the locale(...) as a parameter to read_csv2 like this:

    library(readr)
    
    data <- "date1; date2
    01.01.2000; 30.01.2000
    01.12.2000; 25.12.2000"
    
    read_csv2(data, 
              col_types = "DD",
              locale = locale(date_format = '%d.%m.%Y'))