在1970年1月1日之前转换日期

时间:2016-07-21 15:54:23

标签: r

我正在尝试将一列日期转换为R中的Date对象,但我似乎无法获得所需的结果。这些人的出生日期在1970年1月1日之前,所以当我使用as.Date R时,将例如1/12/54的日期转换为2054-01-12。我该如何解决这个问题?非常感谢。

3 个答案:

答案 0 :(得分:5)

不需要附加软件包,基本R就可以了。但是你需要指定世纪:

R> as.Date("1954-01-12")
[1] "1954-01-12"
R> 

如果您需要非默认格式,请指定它们:

R> as.Date("19540112", "%Y%m%d")
[1] "1954-01-12"
R> 

编辑:如果您的数据真的使用%y%格式,而您恰好做出了需要19世纪的政策决定 ,这是一种基本的R方式:

R> d <- as.Date("540112", "%y%m%d")
R> dlt <- as.POSIXlt(d)
R> dlt$year <- dlt$year - 100
R> as.Date(dlt)
[1] "1954-01-12"
R> 

答案 1 :(得分:2)

如果一切都在二十世纪,它是一个单行 - 只需在开始时用两位数的年份格式化它并在前面拍一个19并转换为日期。再次。男人这看起来很酷%%&gt;%东西:

s = c("1/12/54","1/12/74")
as.Date(format(as.Date(s,format="%d/%m/%y"), "19%y%m%d"), "%Y%m%d")
# [1] "1954-12-01" "1974-12-01"

如果来自&#34; 69&#34;至&#34; 99&#34;是19世纪,然后是另一个单行:

library(dplyr) # for pipe operator:
s %>% as.Date(format="%d/%m/%y") %>% 
     format("%y%m%d") %>%
    (function(d){
       paste0(ifelse(d>700101,"18","19"),d)
       }) %>% 
  as.Date("%Y%m%d")

## [1] "1954-12-01" "1874-12-01"

请注意,未经过彻底测试,因此可能会出现一些错误,或者我已经混合了几个月和几天,因为您需要ISO8601 Compliant

答案 2 :(得分:1)

我愿意:

library(lubridate)

x <- as.Date("1/12/54", format = "%m/%d/%y")
year(x) <- 1900 + year(x) %% 100

> x
[1] "1954-01-12"