Lubridate положить даты в будущее в R - PullRequest
1 голос
/ 15 февраля 2020

Когда я делаю этот код:

library(lubridate)
df$date <- format(as.Date(df$date, "%m/%d/%y") , "%Y")

Некоторые даты, которые должны быть в 1900-х годах, например: 1960, превращаются в 2060. Я не уверен, как это исправить. Диапазон дат, который я хочу, - 1951 - 2014, и у меня есть около 8000 наблюдений.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

Кажется, у вас 2-х git лет. От ?strptime

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

Таким образом, все 2 ди git года с 00-68 начинаются с префикса 20, следовательно, 60 поворотов к 2060, а не 1960.

Могут быть разные способы справиться с этим. Одним из способов было бы вычесть 100 лет из дат, чей год превышает 2014 (поскольку мы знаем диапазон лет).

Например,

df <- data.frame(date = c('1/12/60', '1/12/78' ,'1/1/91', '1/1/54'))
df$date <- as.Date(df$date, "%m/%d/%y")
df
#        date
#1 2060-01-12
#2 1978-01-12
#3 1991-01-01
#4 2054-01-01

inds <- as.numeric(format(df$date, "%Y")) > 2014
df$date[inds] <- df$date[inds] - lubridate::years(100)
df
#        date
#1 1960-01-12
#2 1978-01-12
#3 1991-01-01
#4 1954-01-01
0 голосов
/ 15 февраля 2020

Мы также можем сделать это с chron, поскольку по умолчанию дата отсечения равна 1961

as.Date(chron::dates(c('01/12/60', '01/12/78' ,'01/01/91', '01/01/54')))
#[1] "1960-01-12" "1978-01-12" "1991-01-01" "1954-01-01"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...