Oprava Formátu Času v R

0

Otázka

Mám sloupec časové razítko ze závodu; čas protokoly jsou uvedeny buď ve formátu HH:MM:SS nebo MM:SS formát. Potřebuji převést z znak formátu času; budu používat jako.POSIXct, ale poprvé jsem se s problémy vypořádat s připomínkami, kde je formát MM:SS oproti HH:MM:SS. Když jsem se použije.POSIXct do kolony, dostanu chybu, protože všechny připomínky nemají stejný formát. Jak mohu přidat "00:" vedoucí k "59:34" časové razítko?

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

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

Nejlepší odpověď

3

Základní Výzkum možností -

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"

Protože neexistuje žádná data v datovém as.POSIXct připojí dnešní datum.

2021-11-24 05:55:51

Zajímavé. Snažil jsem se, že druhý řádek, které jste poskytli. Ale w/out, formát a časové pásmo. Co znamená formát?
Père Noël

format se používá k poskytnout vstupní formát dat je v. as.POSIXct očekává YYYY-MM-DD HH:MM:SS formát ale když náš vstup je v jiném formátu, musíme specifikovat to samostatně. %T se používá, když máte data v HH:MM:SS formát. Více informací různých formátů v ?strptime.
Ronak Shah
2

Zde je řešení pomocí lubridate::hms. Pokud chcete používat as.POSIXctnáhradní kód.

To předpokládá, že všechny hodnoty jsou buď MM:SS nebo HH::MM::SS.

ts1 je původní hodnoty, ts2 pre-pended "00:" kde je to nezbytné 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ýsledek:

      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

Mám menší problém, včera v noci kódu fungovalo v pohodě, ale dnes jsem stále tuto chybu: "Chyba: Problém s mutate() sloupec ts3. já ts3 = hms(ts2). x Všechny argumenty musí být číselné nebo NA"
Père Noël

zbraň <- data.rám(ts1 = samec.data$Zbraň.Tim) %>% mutovat(ts2 = ifelse(str_count(ts1, ":") == 1, paste0("00:", ts1), ts1), ts3 = hms(ts2)) <<< to je To, jak jsem postavil svůj kód; zbraň.Tim je můj čas vektor.
Père Noël

Bude potřebovat zobrazit data v gun pomoci. Kód pracuje s příkladem dat v otázce.
neilfws

V jiných jazycích

Tato stránka je v jiných jazycích

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