У меня такой ДФ:

date <- c("2017-10-11","2018-04-02","2017-05-03")
df <- data.frame(date)

Следующий код не может отформатировать его как дату, вместо этого возвращает NA:

df$date <- as.Date(df$date,format='%Y/%m/%d')

Следующий код успешно форматирует его как дату:

df$date <- as.Date(df$date)

Я указывал формат as.Date (как в первом коде as.Date) в других проектах, и раньше он работал у меня. Есть множество ответов на аналогичные вопросы о том, что as.Date возвращает NA, но я не могу найти ни одного, объясняющего, почему мой первый код as.Date не работает в этой ситуации, а второй - работает. Мне не нужно указывать формат для моих целей, но я хотел бы понять, почему первая строка кода не работает.

r
1
orangeman51 25 Май 2018 в 01:16

1 ответ

Лучший ответ

Значение по умолчанию для аргумента format функции as.Date - "%Y-%m-%d", что соответствует формату столбца date в df.

Следовательно, df$date <- as.Date(df$date) работает отлично.

Справка R-Studio описывает аргумент format как:

формат

Строка символов. Если не указано иное, будет предпринята попытка "%Y-%m-%d" затем "%Y/%m/%d" на первом элементе, отличном от NA, и выдаст ошибку, если ни то, ни другое не работает. В противном случае обработка осуществляется через strptime

Но df$date <- as.Date(df$date,format='%Y/%m/%d') не работает. Причина в том, что разделитель /, упомянутый как часть format, отсутствует в столбце данных.

1
MKR 24 Май 2018 в 22:21