Извлечь время (HMS) из объекта lubridate date time? - PullRequest
0 голосов
/ 07 июня 2018

У меня есть следующая дата-время:

t <- "2018-05-01 23:02:50 UTC" </p>

Я хочу разделить его на времяи дата.

Когда я применяю дату (t), я получаю часть даты.Но когда я использую hms, parse_date_time и другие функции lubridate, чтобы сделать это в "HMS" порядке, я получаю NA.

Я проверил другие ответы здесь на SOF, но по какой-то причине он дает мнеNA.

Посоветуйте, пожалуйста, как его распаковать.

Я хочу понять, почему:

strftime(t, format="%H:%M:%S") 

выполнит работу, но то, чего мне не хватает в lubridate::hms или parse_date_time?

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Мое решение - установить library(anytime):

date <- anytime::anydate(t)
time <- strftime(t, format="%H:%M:%S")
0 голосов
/ 13 августа 2018

Чего вам не хватает в lubridate hms(), так это того, что в качестве аргумента он ожидает «символьный вектор тройных часовых секунд».Там нет положения для обработки строки, которая также содержит информацию о дате.Следовательно, выходные данные Sys.Date() или lubridate::now() не работают как входные данные для lubridate::hms().

. Если вам нужно решение tidyverse, вот одно из них:

pacman::p_load(tidyverse, lubridate)

now()
#> [1] "2018-08-13 16:41:31 BST"

get_time <- function(time = now()) {
  time %>%
    str_split(" ") %>%
    map_chr(2) %>%
    hms()
}

get_time()
#> [1] "16H 41M 31S"

get_time("2018-05-01 23:02:50 UTC")
#> [1] "23H 2M 50S"

Создано в 2018-08-13 пакетом Представление (v0.2.0).

0 голосов
/ 07 июня 2018

Как то так?

  library(hms)
    t <- "2018-05-01 23:02:50 UTC"
    unlist(strsplit(t," "))[2]%>%hms::parse_hms()
...