R as.POSIXct尝试两种输入格式

时间:2018-10-31 17:40:51

标签: r date format

我正在读取日期和gps位置的.csv。我需要将日期列转换为日期类。 我正在使用:

data = data.frame(rbind(c('2016/07/19 17:52:00',3674.64416424279,354.266660979476), 
         c('2016/07/19 17:54:00',3674.65121597935,354.246972537617),
         c('2016/07/19 17:55:00',3674.65474186293,354.237128326737),
         c('2016/07/19 17:56:00',3674.65826775671,354.227284122559)))
colnames(data) = (c('GMT_DateTime','northing','easting'))

data$GMT_DateTime<-as.POSIXct(data$GMT_DateTime, tz="GMT", format = "%Y/%m/%d %H:%M:%S")

有时,要读取的.csv中的日期格式为"%Y/%m/%d %H:%M:%S",有时格式为"%m/%d/%Y %H:%M"

有没有一种方法可以将两种可能的格式提供给as.POSIXct()来尝试两种可能的格式?我想像这样:

data$GMT_DateTime<-as.POSIXct(data$GMT_DateTime, tz="GMT", format = "%m/%d/%Y %H:%M" or "%Y/%m/%d %H:%M:%S")

谢谢!

1 个答案:

答案 0 :(得分:2)

接下来,我将使用软件包lubridate
我向示例数据集添加了额外的两行,其日期/时间值为"%m/%d/%Y %H:%M"格式。请注意,该列属于character类,如果它属于factor类,则可能会引发错误。
至于警告,请放心,它们只是lubridate告诉您,它发现了几种格式,无法一次处理所有格式。

tmp <- data$GMT_DateTime    # work on a copy

na <- is.na(ymd_hms(tmp))
data$GMT_DateTime[!na] <- ymd_hms(tmp)[!na]
data$GMT_DateTime[na] <- mdy_hm(tmp)[na]
data$GMT_DateTime <- as.POSIXct(as.numeric(data$GMT_DateTime),  
                                format = "%Y-%m-%d",  
                                origin = "1970-01-01", tz = "GMT")

rm(tmp)    # final clean up

dput()格式的数据。

data <-
structure(list(GMT_DateTime = c("2016/07/19 17:52:00", "2016/07/19 17:54:00", 
"2016/07/19 17:55:00", "2016/07/19 17:56:00", "07/22/2016 17:02", 
"07/23/2016 17:15"), northing = c(3674.64416424279, 3674.65121597935, 
3674.65474186293, 3674.65826775671, 3674.662, 3674.665), easting = c(354.266660979476, 
354.246972537617, 354.237128326737, 354.227284122559, 354.2702, 
354.3123)), row.names = c(NA, -6L), class = "data.frame")