R strptime проблема при использовании% b для форматирования даты - PullRequest
0 голосов
/ 15 мая 2019

Прежде чем пометить как дубликат, я попробовал несколько других решений, а именно:

R, strptime (),% b, пытаясь преобразовать символ в формат даты

strptime, as.POSIXct и as. Дата возврата неожиданного NA

Но, похоже, ни то, ни другое не работает для меня.


Я пытаюсьпреобразовать формат времени Dec-18 в время POSIXct (в этом случае будет 2018-12-01).Я пытаюсь использовать strptime с %b и %y, чтобы добиться этого следующим образом:

> strptime("Dec-18", format = "%b-%y")
[1] NA

Но, очевидно, это не работает.Я читаю информацию о «локалях» и подобных вещах, но вышеуказанные решения не сработали для меня.Я попытался сделать следующее:

> Sys.setlocale("LC_TIME", "C")
[1] "C"
> strptime("Dec-18", format = "%b-%y")
[1] NA

Было также предложено использовать эту локаль, Sys.setlocale("LC_TIME", "en_GB.UTF-8"), но при попытке использовать эту ошибку я получаю сообщение об ошибке:

> Sys.setlocale("LC_TIME", "en_GB.UTF-8")
[1] ""
Warning message:
In Sys.setlocale("LC_TIME", "en_GB.UTF-8") :
  OS reports request to set locale to "en_GB.UTF-8" cannot be honored

Вид припотеря для того, что делать здесь.Мои сокращенные месяцы кажутся правильными исходя из этого:

> month.abb
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

Вот версия R, на которой я работаю:

R version 3.5.3 (2019-03-11) -- "Great Truth"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 15 мая 2019

С lubridate вы можете сделать:

parse_date_time("Dec-18", "my")

[1] "2018-12-01 UTC"
1 голос
/ 15 мая 2019

Самое простое решение будет таким:

as.Date(x = paste0("01-", "Dec-18"),
        format = "%d-%b-%y")
#> [1] "2018-12-01"

format(x = as.Date(x = paste0("01-", "Dec-18"),
                   format = "%d-%b-%y"),
       format = "%b-%y")
#> [1] "Dec-18"

Создано в 2019-05-15 с помощью пакета Представить (v0.2.1)

R не распознает 18 декабря как дату.Добавьте 01-, чтобы он мог определять его как дату, а затем отображать его по своему усмотрению.

1 голос
/ 15 мая 2019

Самым простым решением было бы

library(zoo)
as.Date(as.yearmon("Dec-18", "%b-%y"))
#[1] "2018-12-01"

Проблема в коде ОП заключается в том, что для strptime или as.Date также требуется день.Если его там нет, формат даты не завершен.Один из вариантов: paste в день strptime, и он работает

strptime(paste0("Dec-18", "-01"), format = "%b-%y-%d")
#[1] "2018-12-01 EST"
...