阅读混合格式的日期

问题描述:

如果一列日期包含两种不同的格式,是否有解析这两种方式,我得到2行2012-04-01而不是下面的结果?阅读混合格式的日期

# A tibble: 2 x 1 
     date 
     <date> 
1 2012-04-01 
2   NA 

**Example Code** 
library(tidyverse) 
data <- read_csv("date\n01/04/12\n41000", col_types = cols_only("date" = col_date("%d/%m/%y"))) 
head(data) 
+0

你想'41000'解析为有效日期吗?嗯。 –

+0

看看'lubridate'和'parse_date_time'。类似'parse_date_time(x,c(“%Y-%m-%d',%Y /%m /%d'),exact = TRUE)''可能会工作,否则,请按照字符和' dplyr :: mutate' – CPak

+0

Dirk,是的,这是一种由Excel识别出来的格式,它是从原点开始的天数.Excel将上述两种格式翻译为1/4/12。 – Carl

该解决方案似乎工作,尽管也许不是最优雅的解决方案:

library(tidyverse) 
library(lubridate) 
data <- read_csv("date,text\n01/04/12,a\n41000,b\n02/02/13,c") 
data <- data %>% 
    mutate(date1 = as_date(as.numeric(date), origin = "1899-12-30")) %>% 
    mutate(date2 = as_date(date, "%d/%m/%y")) %>% 
    mutate(date3 = if_else(is.na(date1), date2, date1)) 
head(data) 

,而不是强制的日期数据类型,而读取数据的,你可以尝试类似如下:

data <- read_csv("date\n01/04/12\n41000") 
data %>% mutate(date =ifelse(is.numeric(date), as.Date(date, origin = "1990-01-01"), date)) 
+0

谢谢Shaojl7。我会试试这个 – Carl

+0

在我的示例中,它恰好与两个日期一起工作,因为它们转换为相同日期,但如果我添加第三个不同日期,我会重复第一个日期 data Carl

+0

这使我在正确的过程中,所以非常感谢你。稍微调整一下,我就会按照发布的单独答案工作。 – Carl