Oprava Formát Času v R

0

Otázka

Mám stĺpci čas od závod; čas záznamy sú dané buď vo formáte HH:MM:SS formáte alebo v MM:SS formát. Musím previesť ich z charakteru na formát času; I bude používať ako.POSIXct ale najprv som problémy vybavovanie pripomienok, kde formáte MM:SS, na rozdiel od HH:MM:SS. Keď som sa uplatňujú ako.POSIXct do kolóny, dostanem chybu, pretože všetky pozorovania nemajú rovnaký formát. Ako môžem pridať "00:" vedie až na "59:34" čas?

Čas "59:34" "32:07" "1:08:06"

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

Najlepšiu odpoveď

3

Základná R voľba -

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"

Pretože nie je tam žiadny dátum údajov as.POSIXct pripojí dnešný dátum.

2021-11-24 05:55:51

Zaujímavá. Snažil som sa, že druhý riadok ste tu uvedené. Ale w/out, formát a časové pásmo. Aký formát mám robiť?
Père Noël

format je používaný na zabezpečenie textu formátovanie údajov je. as.POSIXct očakáva YYYY-MM-DD HH:MM:SS formát, ale od nášho vstupu je v inom formáte, musíme určiť, že samostatne. %T používa sa, keď máte údaje v HH:MM:SS formát. Ďalšie informácie o rôznych formátov v ?strptime.
Ronak Shah
2

Tu je riešenie pomocou lubridate::hms. Ak chcete použiť as.POSIXctnahraďte váš kód pre ktoré.

Predpokladá sa, že sa všetky hodnoty sú buď MM:SS alebo HH::MM:SS.

ts1 je pôvodné hodnoty, ts2 vopred pended s "00:" kde je to potrebné a ts3 konečné hodnoty.

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

Výsledok:

      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

Som mierny problém; minulú noc kód pracoval v pohode, ale dnes som zobrazuje toto chybové hlásenie: "Chyba: Problém s mutate() stĺpec ts3. som ts3 = hms(ts2). x Všetky argumenty musia byť číselné, alebo NA"
Père Noël

zbraň < údajov.rám(ts1 = muž.údaje$Zbraň.Tim) %>% mutovať(ts2 = ifelse(str_count(ts1, ":") == 1, paste0("00:", ts1), ts1), ts3 = hms(ts2)) <<< Toto je, ako som postavil môj kód; zbraň.Tim je môj čas vektor.
Père Noël

By potrebné pozrieť sa na údaje v gun na pomoc. Kód funguje s príklade údajov v otázke.
neilfws

V iných jazykoch

Táto stránka je v iných jazykoch

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