Корректировка формата времени в R

0

Вопрос

У меня есть столбец метки времени из гонки; журналы времени даются либо в формате ЧЧ:ММ:СС, либо в формате ММ:СС. Мне нужно преобразовать их из формата символов во временной формат; я буду использовать как.POSIXct, но сначала у меня возникли проблемы с наблюдениями, в которых формат MM:SS, а не HH:MM:SS. Когда я применяю as.POSIXct к столбцу, я получаю сообщение об ошибке, потому что все наблюдения не имеют одинакового формата. Как добавить "00:", приводящее к отметке времени "59:34"?

Время "59:34" "32:07" "1:08:06"

r
2021-11-24 05:12:40
2

Лучший ответ

3

Базовый вариант R -

x <- c("59:34", "32:07", "1:08:06")
as.POSIXct(ifelse(nchar(x) > 5, x, paste0('00:', x)), format = '%T', tz = 'UTC')

#[1]"2021-11-24 00:59:34 UTC" "2021-11-24 00:32:07 UTC" "2021-11-24 01:08:06 UTC"

Поскольку в данных нет даты as.POSIXct добавляет сегодняшнюю дату.

2021-11-24 05:55:51

Интересный. Я попробовал ту вторую строку, которую вы предоставили здесь. Но без формата и часового пояса. Что делает этот формат?
Père Noël

format используется для предоставления формата ввода, в котором находятся ваши данные. as.POSIXct ожидает YYYY-MM-DD HH:MM:SS формат, но поскольку наши входные данные в другом формате, нам нужно указать это отдельно. %T используется, когда у вас есть данные в HH:MM:SS формат. Более подробная информация о различных форматах в ?strptime.
Ronak Shah
2

Вот решение, использующее lubridate::hms. Если вы хотите использовать as.POSIXct, замените это своим кодом.

Предполагается, что все значения либо MM:SS, либо HH::MM::SS.

ts1 являются ли исходные значения, ts2 предварительно указывается "00:", где это необходимо, и ts3 окончательные значения.

library(dplyr)
library(stringr)
library(lubridate)

data.frame(ts1 = c("59:34", "32:07", "1:08:06")) %>% 
  mutate(ts2 = ifelse(str_count(ts1, ":") == 1, paste0("00:", ts1), ts1), 
         ts3 = hms(ts2))

Результат:

      ts1      ts2      ts3
1   59:34 00:59:34  59M 34S
2   32:07 00:32:07   32M 7S
3 1:08:06  1:08:06 1H 8M 6S
2021-11-24 05:35:25

У меня небольшая проблема; прошлой ночью код работал просто отлично, но сегодня я получаю эту ошибку: "Ошибка: Проблема с mutate() колонка ts3. я ts3 = hms(ts2). x Все аргументы должны быть числовыми или NA"
Père Noël

пушкаТим) %>% мутировать(ts2 = ifelse(str_count(ts1, ":") == 1, paste0("00:", ts1), ts1), ts3 = hms(ts2)) ><<Тим-мой временной вектор.
Père Noël

Нужно было бы просмотреть данные в gun чтобы помочь. Код работает с примерами данных в вопросе.
neilfws

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................