我的数据是这样的
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。
我该怎么办?
请帮助。
答案 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))