Dostosowanie formatu czasu w R

0

Pytanie

Mam kolumnę znacznika czasu z wyścigu; dzienniki czasu są podane albo w formacie HH:MM:SS, albo w formacie MM:SS. Muszę je konwertować z formatu znaków w linii format; będę używać.POSIXct, ale najpierw mam problemy z obserwacjami, w których formacie MM:SS, a nie HH:MM:SS. Kiedy stosuję as.POSIXct do kolumny, otrzymuję komunikat o błędzie, ponieważ wszystkie obserwacje nie mają tego samego rozmiaru. Jak dodać "00:", co prowadzi do znaku czasu "59:34"?

Czas "59:34" "32:07" "1:08:06"

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

Najlepsza odpowiedź

3

Wariant podstawowy, 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"

Ponieważ w danych nie chcesz as.POSIXct dodaje dzisiejszą datę.

2021-11-24 05:55:51

Ciekawe. Próbowałem tę drugą linię, którą podałeś tutaj. Ale bez formatu i strefy czasowej. Co sprawia, że ten format?
Père Noël

format podczas korzystania z formatu wprowadzania, w którym znajdują się twoje dane. as.POSIXct czeka YYYY-MM-DD HH:MM:SS format, ale ponieważ nasze dane wejściowe w innym formacie, musimy wskazać to oddzielnie. %T używane, gdy masz dane w HH:MM:SS format. Więcej informacji o różnych formatach w ?strptime.
Ronak Shah
2

Oto rozwiązanie, korzystające z lubridate::hms. Jeśli chcesz użyć as.POSIXctwymień to swoim kodem.

Zakłada się, że wszystkie wartości lub MM:SS lub HH: MM:SS.

ts1 czy są oryginalne wartości, ts2 wstępnie określa "00:" gdzie jest to konieczne, i ts3 ostateczne wartości.

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))

Wynik:

      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

Mam mały problem; wczoraj kod pracował dobrze, ale dzisiaj mam ten błąd: "Błąd: Problem z mutate() kolumna ts3. ja ts3 = hms(ts2). x Wszystkie argumenty powinny być liczbami lub NA"
Père Noël

пушкаТим) %>% mutacji(ts2 = ifelse(str_count(ts1, ":") == 1, paste0("00:", ts1), ts1), ts3 = hms(ts2)) ><<Tim-mój tymczasowej vector.
Père Noël

Trzeba by przejrzeć dane w gun aby pomóc. Kod działa z przykładami danych w pytaniu.
neilfws

W innych językach

Ta strona jest w innych językach

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