我在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"
有没有办法确保我返回在正确的世纪开始的日期?
由于
答案 0 :(得分:4)
它看起来不是(来自%y
中的?strptime
的文档),因为有任何明显的选项可以更改从2位数年份推断的默认世纪。
由于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"
答案 1 :(得分:2)
dd <- c("20-Sep-90", "24-Feb-05", "16-Aug-65",
"19-Nov-56", "28-Nov-59", "19-Apr-86")
library(lubridate)
DD=dmy(dd)
https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html http://vita.had.co.nz/papers/lubridate.pdf
答案 2 :(得分:0)
strptime(data$dob, "%Y/%m/%d")