从多种格式的字符串中解析R中的日期

时间:2019-01-20 10:42:25

标签: r date

我在R中有大约2,000行的小标题。它是使用read_excel从Excel导入的。字段之一是日期字段:dob。它以字符串形式导入,并且具有三种格式的日期:

"YYYY-MM-DD"
"DD-MM-YYYY"
"XXXXX"  (ie, a five-digit Excel-style date)

假设我将列视为向量。

dob <- c("1969-02-02", "1986-05-02", "34486", "1995-09-05", "1983-06-05",
         "1981-02-01", "30621", "01-05-1986")

我看到我可能需要一个同时使用parse_date_time和as.Date的解决方案。

如果我使用parse_date_time:

dob_fixed <- parse_date_time(dob, c("ymd", "dmy"))

这会修复所有问题,但五位数字会返回NA。

我可以使用as.integer和as.Date来固定五位数:

dob_fixed2 <- as.Date(as.integer(dob), origin = "1899-12-30")

理想情况下,我先运行一个,然后再运行另一个,但是因为每个都在不起作用的字符串上返回NA,所以我不能这样做。

有建议做所有事情吗?我可以简单地在Excel中更改它们并重新导入,但是我觉得这很欺骗!

1 个答案:

答案 0 :(得分:1)

我们在第一轮运行之后根据NA值创建一个逻辑索引,并使用它为第二轮运行建立索引

i1 <- is.na(dob_fixed)
dob_fixed[i1] <- as.Date(as.integer(dob[i1]), origin = "1899-12-30")