Tenho um conjunto de dados brutos que usa um decimal como separador de tempo e quero que ele tenha dois pontos, mas não tenho ideia de como alterá-lo. Meu tempo bruto (com decimais) está na coluna "df$Time", e meu tempo correto (com os dois pontos) estará em "df$time" (para manter a consistência com os outros dataframes no meu código). df$Date é uma coluna de caracteres, df$Time é uma coluna numérica. Estou usando uma infinidade de bibliotecas, algumas incluindo dplyr
e stringr
.
Não sei bem como criar uma tabela bonita com dados recriáveis. Escrever nesta plataforma é novidade para mim. Mas abaixo, incluo um trecho dos dados de tempo e alguns métodos que tentei. Qualquer ajuda é bem-vinda! Parece tão simples, mas realmente não consigo entender.
(Também peço desculpas pelo formato dos meus dados abaixo, tentei fazer uma tabela, mas uma que parecesse melhor e, novamente, nada funcionou. Acho que preciso dar uma pausa na solução de problemas, rs)
Aqui está o resultado após a execução dput(head(df))
:
structure(list(Date = c("01/03/2024", "01/03/2024", "01/03/2024", "01/03/2024", "01/03/2024", "01/03/2024"), Time = c(0, 0.05, 0.1, 0.15, 0.2, 0.25)), row.names = c(NA, 6L), class = "data.frame")
Aqui está um trecho de duas horas de dados simplificados (incluindo apenas colunas relevantes) que mostra o problema:
Date Time
181 01/03/2024 15.00
182 01/03/2024 15.05
183 01/03/2024 15.10
184 01/03/2024 15.15
185 01/03/2024 15.20
186 01/03/2024 15.25
187 01/03/2024 15.30
188 01/03/2024 15.35
189 01/03/2024 15.40
190 01/03/2024 15.45
191 01/03/2024 15.50
192 01/03/2024 15.55
193 01/03/2024 16.00
194 01/03/2024 16.05
195 01/03/2024 16.10
196 01/03/2024 16.15
197 01/03/2024 16.20
198 01/03/2024 16.25
199 01/03/2024 16.30
200 01/03/2024 16.35
201 01/03/2024 16.40
202 01/03/2024 16.45
203 01/03/2024 16.50
204 01/03/2024 16.55
205 01/03/2024 17.00
Aqui estão alguns dos métodos que tentei:
Método 1:
df$time <- df %>% mutate(across(everything(), ~str_replace(., ",", ".")))
Método 2:
df$time <- str_replace(df$Time, ".", ":")
Método 3:
df$Time <- as.character(df$Time)
df$time <- gsub(".", ":", df$Time, fixed = T)
Método 4:
df$time <- strptime(as.character(df$Time), "%H.%M")
df$time <- format(df$time, "%H:%M")
Método 5:
df$time <- as.POSIXlt(df$Time)
Método 6:
df$time <- df$Time
df$time <- gsub(".", ":", df$time)
Método 7:
df$time <- df$Time
df$time <- str_replace_all(df$time, ".", ":")
Você pode usar
sprintf
para garantir que tenha a formatação adequada:produz:
Dados:
Isso deve funcionar:
Você também pode converter números diretamente para o formato desejado, seja
hms
,POSIXct
/POSIXlt
ou outro, com ou sem componente de data:Outra opção poderia ser
format
+n_small = 2