如何将具有不同日期格式的多个变量转换为Date?

时间:2019-02-20 11:56:03

标签: r date

我的数据是这样的

       Date1        Date2       Date3
     13/12/2019   2018/05/21   21/05/2019
     2019/13/12   21/05/21     05/21/2019

变量内部和各个变量之间的日期格式不同。我想一次将所有变量都转换为一种通用格式"%d/%m%Y"的as.Date。 我该怎么办?

请帮助。

1 个答案:

答案 0 :(得分:1)

一个选项是parse_date_time

library(tidyverse)
library(lubridate)
df1 %>% 
   mutate_all(parse_date_time, orders = c("mdy", "ymd", "dmy", "ydm"))
#      Date1      Date2      Date3
#1 2019-12-13 2018-05-21 2019-05-21
#2 2019-12-13 2021-05-21 2019-05-21

或另一个选项是anydate中的anytime。使用getFormats()检查默认格式列表中是否存在所有格式,如果缺少某些格式,请使用addFormats添加所有格式,然后将其应用于每一列

library(anytime)
addFormats(c("%d/%m/%Y", "%Y/d/%m", "%d/%m/%y"))
df1 %>% 
   mutate_all(anydate)

如果列数更多,并且只想对“日期”列实施,请使用mutate_at

df1 %>% 
    mutate_at(vars(starts_with("Date")), anydate)

或指定索引(在原始数据集中)

df1 %>%
    mutate_at(4:6, anydate)

数据

df1 <- structure(list(Date1 = c("13/12/2019", "2019/13/12"), Date2 = c("2018/05/21", 
 "21/05/21"), Date3 = c("21/05/2019", "05/21/2019")),
   class = "data.frame", row.names = c(NA, 
  -2L))