as.Date не выдает ошибку, когда это должно - PullRequest
1 голос
/ 22 января 2020

Рассмотрим кодовый блок ниже.

strDates<-c("01/01/2019","08/16/1975")
d<-as.Date(strDates,"%m/%d/%y")
d
[1] "2020-01-01" "2019-08-16"

Очевидно, что ответ неверный. Проблема в том, что% y должен быть% Y, потому что это% Y, который принимает год с четырьмя символами. Но не должно так. Дата ошибка из-за этого неудачного совпадения. Вместо этого он дает неверный ответ. Это плохой дизайн или есть какая-то причина, по которой функция не дает сбой и вместо этого возвращает неправильный ответ?

Ответы [ 2 ]

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

Поскольку комментарии указывают на спам после того, как данные игнорируются, но учтите, что вы можете предоставить вектор форматов, используя аргумент tryFormats, и в этом случае он будет использовать соответствующий.

strDates <- c("01/01/2019","08/16/1975", "01/01/00")
as.Date(strDates, tryFormats = c("%m/%d/%y", "%m/%d/%Y"))
## [1] "2020-01-01" "1975-08-16" "2000-01-01"
2 голосов
/ 22 января 2020

Это ожидаемое поведение. Как указано в ?strptime:

% y Год без века (00–99). При вводе значения от 00 до 68 начинаются с префикса от 20, а от 69 до 99 - от 19 - это поведение, определенное стандартами POSIX 2004 и 2008 годов, но они также говорят: «ожидается, что в будущей версии столетие по умолчанию будет выведено из 2-ди git год изменится.

По сути, для этого вопроса происходит то, что часть года игнорируется и имеет префикс, как определено в документах. Итак,

c("01/01/2019","08/16/1975")

Поскольку 2019 (20 часть) находится в диапазоне от 00 до 68, префикс равен 20, а поскольку 19 (с 1975 года) также находится в том же диапазоне, итоговые годы равны 2020 и 2019 году. Как указано в документах и ​​в @ 42-, strptime имеет дело только с первыми двумя цифрами части года, когда используется %y%

будущая версия, которую столетие по умолчанию выводит из 2-ди git год изменится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...