Использование аргумента формата в as.Date()

Я пытаюсь преобразовать «07,29,30» в формат даты, используя as.Date() в R.

(Обратите внимание, что формат строки «мм, дд, гг», то есть 29 июля 1930 г.)

Поэтому я использовал следующий код:

as.Date("07,29,30", format = "%m,%d,%y")

Но год, который я получаю, — это 2030, а не 1930 год. Как я могу указать R преобразовать значение в дату за столетие до этого?


person HyeongGyu Froilan Choi    schedule 13.04.2017    source источник
comment
посмотрите на это: years-with" title="Есть ли более элегантный способ преобразовать годы из двух цифр в годы с четырьмя цифрами с помощью"> stackoverflow.com/questions/12323693/   -  person din    schedule 13.04.2017
comment
У меня воспоминания о днях 2000 года.   -  person Andrew Brēza    schedule 13.04.2017


Ответы (4)


Поскольку значения года от 00 до 68 кодируются как 20 для века. Из документации strptime кажется, что причина этого в следующем.

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

Вы можете использовать приведенный ниже код, чтобы перекодировать его.

d <- as.Date("07,29,30", format = "%m,%d,%y")

> as.Date(ifelse(d > today(), format(d, "19%y-%m-%d"), format(d)))
[1] "1930-07-29"
person PKumar    schedule 13.04.2017

Я все равно вставлю:

# use this library
library(lubridate)

# convert to the format (your way or you acn use lubridate)
dateconvert <- as.Date("07,29,30", format = "%m,%d,%y") 

# get the year
inputYear <- year(dateconvert)

# convert the year
year(dateconvert) <- ifelse(inputYear > 2000, 1900 + (inputYear %% 100), inputYear)
person din    schedule 13.04.2017

Попробуйте следующее: format(as.Date("07,29,30", format = "%m,%d,%y"), "19%y-%m-%d")

person Atmajit    schedule 13.04.2017

Чтобы решить эту проблему, используйте strtotime() и date():

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
person Nilesh    schedule 13.04.2017
comment
вы имеете в виду strptime()? - person MLavoie; 13.04.2017