我有一个非常大的数据集,其中包含不同日期格式的列表,即以下内容:
2016-12-07 06:24:49
05/12/2017 08:01
05/12/2018 08
19.02.2018 04:32:35
06-01-2018 00:32:24
我试图将它们全部转换为posixlt,因为整列都属于字符类。我需要保留所有信息。
我为每一个尝试了以下操作:
df.all.copy$Time <- as.POSIXlt(df.all.copy$Time, tz="GMT", format = c("%d-%m-%Y %H:%M:%S"), optional = F)
应用以下功能后,此代码:
df.all.copy$Time <- gsub("/", "-", df.all.copy$Time)
df.all.copy$Time <- gsub(".", "-", df.all.copy$Time)
df.all.copy$Time <- as.POSIXlt(df.all.copy$Time, tz="GMT", format, tryFormats = c("%Y-%m-%d %H:%M:%S",
"%d-%m-%Y %H:%M:%S"), optional = F)
但是它只是行不通,上面仅将函数应用于其中的1/2,其余部分保留为NA。
任何帮助都将受到欢迎。
答案 0 :(得分:1)
假设第二和第三种情况的不明确的日期/月份是天后跟月份,我们可以使用anytime
自动选择format
并转换为DateTime格式
library(anytime)
anytime(v1)
#[1] "2016-12-07 06:24:49 EST" "2017-05-12 08:01:00 EDT" "2018-05-12 08:00:00 EDT" NA
#[5] "2018-06-01 00:00:00 EDT"
或在parse_date_time
library(lubridate)
parse_date_time(v1, c("%Y-%m-%d %H:%M:%S", "%d/%m/%Y %H:%M",
"%d/%m/%Y %H", "%d.%m.%Y %H:%M:%S", "%d-%m-%Y %H:%M:%S"))
v1 <- c('2016-12-07 06:24:49', '05/12/2017 08:01', '05/12/2018 08',
'19.02.2018 04:32:35', '06-01-2018 00:32:24 ')