R as.POSIXct попробуйте два формата ввода - PullRequest
0 голосов
/ 31 октября 2018

Я читаю в .csv датах и ​​позициях GPS. Мне нужно преобразовать столбец даты в класс даты. Я использую:

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 голосов
/ 31 октября 2018

В дальнейшем я буду использовать пакет 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...