阅读混合格式的日期
问题描述:
如果一列日期包含两种不同的格式,是否有解析这两种方式,我得到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)
答
该解决方案似乎工作,尽管也许不是最优雅的解决方案:
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))
你想'41000'解析为有效日期吗?嗯。 –
看看'lubridate'和'parse_date_time'。类似'parse_date_time(x,c(“%Y-%m-%d',%Y /%m /%d'),exact = TRUE)''可能会工作,否则,请按照字符和' dplyr :: mutate' – CPak
Dirk,是的,这是一种由Excel识别出来的格式,它是从原点开始的天数.Excel将上述两种格式翻译为1/4/12。 – Carl