Corectarea Format în R

0

Problema

Am si eu o coloană de marcaje temporale dintr-o rasă; jurnalele de timp sunt date fie în HH:MM:SS format sau MM:SS format. Am nevoie pentru a le converti de la un caracter la formatul de timp; eu voi fi folosind ca.POSIXct dar mai întâi am probleme de-a face cu observații în cazul în care formatul este MM:SS ca spre deosebire de HH:MM:SS. Atunci când I se aplică ca.POSIXct la coloana, am primit o eroare, deoarece toate observațiile nu au același format. Cum adaug "00:" a condus la o "59:34" timestamp?

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

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

Cel mai bun răspuns

3

O bază R opțiune -

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"

Deoarece nu există nici o dată în date as.POSIXct adaugă data de astăzi.

2021-11-24 05:55:51

Interesant. Am încercat de-a doua linie furnizate aici. Dar w/out format și fusul orar. Ce are formatul face?
Père Noël

format este folosit pentru a oferi format de intrare datele dvs. este în. as.POSIXct se așteaptă YYYY-MM-DD HH:MM:SS format dar când intrarea este în format diferit, avem nevoie pentru a specifica separat. %T este utilizat atunci când aveți date în HH:MM:SS format. Mai multe detalii de diferite formate în ?strptime.
Ronak Shah
2

Aici este o soluție folosind lubridate::hms. Dacă doriți să utilizați as.POSIXct, substitut codul pentru asta.

Se presupune că toate valorile sunt fie MM:SS sau HH::MM:SS.

ts1 este original valori, ts2 pre-melor cu "00:" în cazul în care este necesar și ts3 valorile finale.

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

Rezultatul:

      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

Am o mică problemă; ultima noapte de cod a lucrat foarte bine, dar azi primesc aceasta eroare: "Eroare: Problema cu mutate() coloana ts3. am ts3 = hms(ts2). x Toate argumentele trebuie să fie numere sau NA"
Père Noël

arma <- date.cadru(ts1 = masculin.date$Arma.Tim) %>% evolua(ts2 = ifelse(str_count(ts1, ":") == 1, paste0("00:", ts1), ts1), ts3 = hms(ts2)) <<< Acest lucru este cum mi-am construit cod; arma.Tim este timpul meu vector.
Père Noël

Ar trebui să vedeți datele în gun pentru a vă ajuta. Codul funcționează cu date de exemplu în cauză.
neilfws

În alte limbi

Această pagină este în alte limbi

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