在 R 中的日期格式

3

我有一个数据框中的日期列,格式为chr,如下:

chr [1:1944] "20-Sep-90" "24-Feb-05" "16-Aug-65" "19-Nov-56" "28-Nov-59" "19-Apr-86"

我想使用以下语句将其转换为日期格式:

strptime(x=data$dob, '%d-%b-%y')

但是结果中有几个未来的日期,例如:

[1] "1990-09-20" "2005-02-24" "2065-08-16" "2056-11-19" "2059-11-28" "1986-04-19" "2041-04-01" "1971-01-23"
[9] "1995-11-25" "1995-11-25" "2009-02-11" "2002-09-19" "1977-10-06" "1998-03-22" "2050-03-12" "2030-03-26"

有没有办法确保返回的日期在正确的世纪开始?

谢谢

3个回答

4

?strptime的文档中看起来(对于%y),似乎没有明显的选项可以更改从两位数年份推断出的默认世纪。

然而,由于strptime()返回的对象具有POSIXlt类,因此从今天(或任何其他您想使用的截止日期)之后的任何日期减去100年是非常简单的事情。

# Use strptime() to create object of class POSIXlt
dd <- c("20-Sep-90", "24-Feb-05", "16-Aug-65", 
        "19-Nov-56", "28-Nov-59", "19-Apr-86")
DD <- strptime(dd, '%d-%b-%y')

# Subtract 100 years from any date after today
DD$year <- ifelse(DD > Sys.time(), DD$year-100, DD$year)
DD
[1] "1990-09-20" "2005-02-24" "1965-08-16" "1956-11-19" "1959-11-28" "1986-04-19"

谢谢@Josh,我使用了你的ifelse和lubridate中的year函数来完成这个任务。data$year <- ifelse(year(data$dob) > year(Sys.time()), year(data$dob)-100 , year(data$dob)) 然后将其粘贴在一起并使用strptime重新解析。 - John

2

0
strptime(data$dob, "%Y/%m/%d")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接