2017-08-30 84 views
0

如果一列日期包含兩種不同的格式,是否有解析這兩種方式,我得到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

回答

0

該解決方案似乎工作,儘管也許不是最優雅的解決方案:

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) 
0

,而不是強制的日期數據類型,而讀取數據的,你可以嘗試類似如下:

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 < - read_csv(「date \ n01/04/12 \ n41000 \ n02/05/13「) – Carl

+0

這使我在正確的過程中,所以非常感謝你。稍微調整一下,我就會按照發布的單獨答案工作。 – Carl