Как отформатировать время в R - PullRequest
1 голос
/ 26 марта 2019

Мне дали набор данных, который перечисляет дату и время отдельно. С датами все в порядке, однако время рассматривается как символ, а не как объект даты / времени.

Текущий столбец времени выглядит как «13:00», «13:05», «13:10» и т. Д.

Я попытался изменить столбец с помощью as.POSIXct (), однако он изменил столбец на все NA.

Это была моя попытка:

data = data %>%
    mutate(time = as.POSIXct(time, format = "h:m"))

Я ожидал похожий столбец, но вместо строк я хотел, чтобы это были времена / даты. Спасибо за любую помощь!

Ответы [ 3 ]

2 голосов
/ 26 марта 2019

Класс times в хрон может представлять время без дат:

library(chron)
library(dplyr)

# input data
data <- data.frame(date = "2000-01-01", time = c("13:00", "13:05", "13:10"))

data %>%
  mutate(date = as.chron(as.character(date)),
         time = times(paste0(time, ":00")),
         datetime = chron(date, time))

дает:

      date     time            datetime
1 01/01/00 13:00:00 (01/01/00 13:00:00)
2 01/01/00 13:05:00 (01/01/00 13:05:00)
3 01/01/00 13:10:00 (01/01/00 13:10:00)
0 голосов
/ 26 марта 2019

Для простого, не пакетного решения:

Сначала я создал бы столбец с датой и временем в нем

dateandtime <- as.character(paste(date, time, sep = ' '))

, а затем использовал функцию strptime:

dateandtime <- strptime(dateandtime,
                        format = "%Y-%m-%d %H:%M",
                        tz = 'GMT')

просто поместите имя кадра данных перед всеми переменными, например:

df$dateandtime <- as.character(paste(df$date, df$time, sep = ' '))

Надеюсь, это поможет!

0 голосов
/ 26 марта 2019

Если вы используете as.POSIXct, вам нужно указать другой формат:

as.POSIXct("13:05", format = "%H:%M")

Это, однако, возвращает [1] "2019-03-26 13:05:00 CET", поскольку дата / время представлены в виде календарных дат плюс время с точностью до секунды.

Если вы хотите использовать только время, вы можете использовать data.table::asITime:

data.table::as.ITime(c("13:00", "13:05", "13:10"))

Возвращает:

str(data.table::as.ITime(c("13:00", "13:05", "13:10")))
'ITime' int [1:3] 13:00:00 13:05:00 13:10:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...