Применение Posixlt к столбцу с несколькими форматами - PullRequest
0 голосов
/ 27 ноября 2018

У меня очень большой набор данных, который содержит список различных форматов даты, а именно:

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 голосов
/ 27 ноября 2018

Предполагая, что неоднозначный день / месяц для 2-го и 3-го случая - это день, за которым следует месяц, мы можем использовать 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"))

data

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