我有一个日期的字符向量格式为DDMMYYY**(millenium character省略)**,我必须转换为日期向量。
dates <- c("0410988", "2305009", "1111964", "0204015", "1803015", "0709015","0401015", "2012015", "3004158", "1205015")
以下是预期产出日期:
2009-05-23,1964-11-11,2015-04-02,2015-03-18,015-09-07,2015-01-04,2015-12-20,2158-04-30,2015-05-12
我尝试删除第一个Y字符,并使用常规的as.Date()
和format= %d%m%y
:
dates <- c("0410988", "2305009", "1111964", "0204015", "1803015", "0709015","0401015", "2012015", "3004158", "1205015")%\>%
sapply(dates, function(x) paste0(substr(x, 1, 4), substr(x, 6, nchar(x)))) %\>%
as.Date(., format = "%d%m%y")
但这显然行不通:1111964被转换为2064-11 - 11而不是1964-11-11,3004158被转换为2058-04-30而不是2158-04-30(这个日期是模糊的)。
我还尝试使用substring()
分别提取表示日、月和年的字符,然后将它们插入make_date()
。然而,这也不适用于每年只有3个数字的情况(这里只是1111964如何工作的例子):
make_date("964", "11", "11")
[1] "964-11-11"
我不能只是把1000加到年份上,因为它在2000年之后的几年里都不起作用,所以我认为必须有一个更好的方法来进行这种转换。
2条答案
按热度按时间hmmo2u0o1#
注解中2年答案的一个基数R替代方法是使用
ifelse
来确定第5位是“9”还是“0”,然后使用gsub
输入千禧年并转换为四年日期:输出:
kpbwa7wx2#
以下是另一种方法: