R язык результат будет NA или другой после использования as.Date - PullRequest
1 голос
/ 12 июня 2019

Я изучаю пример EDA и сталкиваюсь с проблемой преобразования дат.Номер будет другим после использования функции as.Date.

dates <- pm0$Date
> str(dates)
 int [1:1304287] 20120101 20120104 20120107 20120110 20120113 20120116 20120119 20120122 20120125 20120128 ...

dates <- as.Date(as.character(dates), "%y%m%d")
> str(dates)
 Date[1:1304287], format: "2020-12-01" "2020-12-01" "2020-12-01" "2020-12-01" "2020-12-01" ...

## the date is changed from 20120101 to 20201201 and all the results are the same

## If i modify the code to be (format = "%y-%m-%d") the result will be NA

1 Ответ

5 голосов
/ 12 июня 2019

%y указывает на год с двумя цифрами, нам нужно %Y для года с четырьмя цифрами.

as.Date("20120101", "%Y%m%d")
#[1] "2012-01-01"

Если мы сделаем %y, он будет совпадать с первыми двумя цифрами 20 как годи с префиксом 20 по умолчанию он добавляет текущую эру, затем месяц соответствует «12» и следующему дню, оставляя последний 01 из

as.Date("20120101", "%y%m%d")
#[1] "2020-12-01"

Это также задокументированов ?strptime

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

% Y Год с веком.Обратите внимание, что, хотя в первоначальном григорианском календаре не было нуля, ISO 8601: 2004 определяет его как действительный (интерпретируется как 1BC): см. https://en.wikipedia.org/wiki/0_(year). Обратите внимание, что в стандартах также говорится, что годы до 1582 года в его календаре должныиспользоваться с согласия вовлеченных сторон.

Хотя format не задокументировано в ?as.Date, он дает ссылку на strptime для проверки format

формат
символьная строка.Если он не указан, он будет пытаться поочередно по одному форматировать первый элемент, отличный от NA, и выдаст ошибку, если ничего не работает.В противном случае обработка выполняется через strptime.

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