R lubridate guess_formats дублирует вектор - PullRequest
0 голосов
/ 16 мая 2018

Здравствуйте, дорогие, полезные, знающие R гуру и Stackoverflowers

Я пытаюсь форматировать даты последовательно по ряду наборов данных, используя предположения от lubridate. Однако это объединяет два экземпляра столбца. Вот минимальный пример:

library(lubridate)
x <- c("2014-01-18 00:00:00","2015-03-01 00:00:00","2014-05-05 00:00:00")
y <- as.Date(x, format = guess_formats(x, "Ymd HMS"))

Результат:

> x
[1] "2014-01-18 00:00:00" "2015-03-01 00:00:00" "2014-05-05 00:00:00"
> y
[1] "2014-01-18" "2015-03-01" "2014-05-05" "2014-01-18" "2015-03-01"
[6] "2014-05-05"

Любые указатели были бы великолепны!

1 Ответ

0 голосов
/ 16 мая 2018

Проблема заключается в guess_formats.

Если вы запустите guess_formats(x, "Ymd HMS"), вы получите не 3 формата, а 6 форматов.

             YOmdHMS              YOmdHMS              YOmdHMS               YmdHMS               YmdHMS               YmdHMS 
"%Y-%Om-%d %H:%M:%S" "%Y-%Om-%d %H:%M:%S" "%Y-%Om-%d %H:%M:%S"  "%Y-%m-%d %H:%M:%S"  "%Y-%m-%d %H:%M:%S"  "%Y-%m-%d %H:%M:%S" 

Теперь вы передаете в формат as.Date 6 форматов, которые будут обрабатывать их и повторять x для соответствия. Если вы просто вставите эти 6 форматов в формат as.Date, вы сможете увидеть результат вашего вектора y.

as.Date(x, format = c("%Y-%Om-%d %H:%M:%S", "%Y-%Om-%d %H:%M:%S", "%Y-%Om-%d %H:%M:%S" , "%Y-%m-%d %H:%M:%S",  "%Y-%m-%d %H:%M:%S",  "%Y-%m-%d %H:%M:%S") 

[1] "2014-01-18" "2015-03-01" "2014-05-05" "2015-05-05" "2014-01-18" "2015-03-01"

Очевидным решением было бы использовать y <- ymd_hms(x), поскольку вы все равно пытаетесь угадать этот формат, а ymd_hms уже пытается проанализировать множество различных версий этого формата.

...