将Posixlt应用于具有多种格式的列

时间:2018-11-26 22:30:09

标签: r

我有一个非常大的数据集,其中包含不同日期格式的列表,即以下内容:

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。

任何帮助都将受到欢迎。

1 个答案:

答案 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 ')