我正在读取日期和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")
谢谢!
答案 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")