Calcule a sequência de caracteres "dias, horas, minutos, segundos" para o total numérico de dias [duplicado]
Esta pergunta já tem uma resposta aqui:
R extrai componentes de tempo de strings semi-padrão 2 respostasVi muitas perguntas relacionadas a horários de formatação, mas nenhuma no formato importado específico que tenho:
Time <- c(
"22 hours 3 minutes 22 seconds",
"170 hours 15 minutes 20 seconds",
"39 seconds",
"2 days 6 hours 44 minutes 17 seconds",
"9 hours 54 minutes 36 seconds",
"357 hours 23 minutes 28 seconds",
"464 hours 30 minutes 7 seconds",
"51 seconds",
"31 hours 39 minutes 2 seconds",
"355 hours 29 minutes 10 seconds")
Alguns momentos contêm apenas "segundos" e outros "minutos e segundos", "dias, horas, minutos e segundos", "dias e segundos" etc. etc. Também existem valores de NA que preciso manter. Como faço para que esse vetor de caractere calcule (ou seja, adicione dias, horas, minutos, segundos) o total de dias numéricos?
Por exemplo
Time
8.10
19.3
0.68
2.28
48.1
0.00
0.70
0.1
3.2
13.9
Obrigado
EDITA
Velha pergunta, mas um simpleslubridate
chamada faz o truque agora:
(period_to_seconds(period(time)) / 86400) %>% round(2)
@This também faz o truque sem outros pacotes que não sejam o%>%
para facilitar a leitura:
Time_vec <- mapply(function(tt, to_days) {
ifelse(grepl(tt, Time), gsub(paste0("^.*?(\\d+) ", tt, ".*$"), "\\1", Time), 0) %>%
as.numeric() / to_days
},
c("day", "hour", "minute", "second"),
c(1, 24, 1440, 86400)
) %>%
apply(1, sum) %>%
round(2)
Nos meus dados reais, apenas um valor era diferente dolubridate
solução,0.96
vs0.97
.