Преобразование строки неоднозначных символов в POSIXct - PullRequest
1 голос
/ 28 января 2020

У меня есть несколько напечатанных строк даты и времени, и я пытаюсь понять, почему следующий код не работает. Я думаю, что неправильно понял цель опции format в strftime.

Может кто-нибудь объяснить, почему не работает следующее, и предложить, как я могу преобразовать эти строки в понятный формат даты и времени? R?

library(tidyverse)

data <- tribble(
  ~time, ~value,
  "Tue, Jan 28 2020 13:41:26", 1,
  "Tue, Jan 28 2020 13:41:07", 2,
  "Tue, Jan 28 2020 13:40:06", 3,
  "Tue, Jan 28 2020 13:39:04", 4
)

data %>% 
  mutate(
    # see ?strftime for the POSIX standard conversions used below
    time = strftime(time, format = "%a,%b %d %Y %T")
  )

Сообщение об ошибке:

Error in as.POSIXlt.character(x, tz = tz) : character string is not in a standard unambiguous format

Я не думаю, что это проблема локали, Sys.getlocale(category = "LC_ALL") выход:

[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"

1 Ответ

3 голосов
/ 28 января 2020

Мы можем использовать mdy_hms из lubridate

library(dplyr)
library(lubridate)
data %>%
     mutate(time = mdy_hms(time))
# A tibble: 4 x 2
#  time                value
#  <dttm>              <dbl>
#1 2020-01-28 13:41:26     1
#2 2020-01-28 13:41:07     2
#3 2020-01-28 13:40:06     3
#4 2020-01-28 13:39:04     4

strftime работает на Datetime, объект, здесь class равен character. Согласно ?strftime

Формат и методы as.character и strftime преобразуют объекты из классов "POSIXlt" и "POSIXct" в символьные векторы.

data %>% 
     mutate(time  = as.POSIXct(time, format = '%a, %b %d %Y %T'))
# A tibble: 4 x 2
#  time                value
#  <dttm>              <dbl>
#1 2020-01-28 13:41:26     1
#2 2020-01-28 13:41:07     2
#3 2020-01-28 13:40:06     3
#4 2020-01-28 13:39:04     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...