La corrección del Formato de la Hora en R

0

Pregunta

Tengo una columna de marca de tiempo de una carrera; el tiempo de los registros ya sea en el formato HH:MM:SS formato o formato MM:SS. Tengo que convertirlos a partir de caracteres de formato de hora; me va a utilizar como.POSIXct pero primero estoy teniendo problemas para lidiar con las observaciones en las que el formato MM:SS frente a HH:MM:SS. Cuando aplico como.POSIXct a la columna, me sale un error, ya que todas las observaciones no tienen el mismo formato. ¿Cómo puedo añadir el "00:" que conduce a "un 59:34" timestamp?

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

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

Mejor respuesta

3

Una base de R opción -

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"

Ya que no hay ninguna fecha en los datos as.POSIXct añade la fecha de hoy.

2021-11-24 05:55:51

Interesante. He intentado que la segunda línea que se proporciona aquí. Pero w/el formato y la zona horaria. Lo que hace el formato que hacer?
Père Noël

format se utiliza para proporcionar el formato de entrada de los datos. as.POSIXct espera YYYY-MM-DD HH:MM:SS el formato, pero desde nuestra entrada está en un formato diferente tenemos que especificar por separado. %T se utiliza cuando se tienen datos en HH:MM:SS formato. Más detalles de los distintos formatos en ?strptime.
Ronak Shah
2

He aquí una solución utilizando lubridate::hms. Si desea utilizar as.POSIXct, sustituir el código para que.

Se supone que todos los valores están MM:SS o HH::MM:SS.

ts1 es el original de valores, ts2 pre-pendiente con "00:" cuando sea necesario y ts3 los valores finales.

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

Resultado:

      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

Tengo un pequeño problema; ayer por la noche el código funcionó bien, pero hoy estoy recibiendo este error: "Error: Problema con mutate() columna ts3. yo ts3 = hms(ts2). x Todos los argumentos deben ser numéricos o de NA"
Père Noël

pistola <- data.marco(ts1 = masculino.datos$Pistola.Tim) %>% mutar(ts2 = ifelse(str_count(ts1, ":") == 1, paste0("00:", ts1), ts1), ts3 = hms(ts2)) <<< Esta es la forma en que he construido mi código; arma de fuego.Tim es mi tiempo de vector.
Père Noël

Tendría que ver los datos en gun para ayudar. Código funciona con los datos del ejemplo en la pregunta.
neilfws

En otros idiomas

Esta página está en otros idiomas

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