Convertendo formato de hora em numérico com R
Pergunta
Na maioria dos casos, convertemos a hora numérica para o formato posixct usando R. No entanto, às vezes, queremos comparar qual ponto de tempo é anterior, então preferimos o formato de hora numérica.Portanto, é uma questão bastante prática converter o formato da hora em numérico.Por exemplo, tenho o formato de dados como "2001-03-13 10:31:00",
begin <- "2001-03-13 10:31:00"
Usando R, quero descobrir como convertê-lo em um numérico, por exemplo,a hora juliana, algo como os segundos que passam entre 1970-01-01 00:00:00 e 2001-03-13 10:31:00.
Você tem alguma sugestão?
O calendário juliano começou em 45 AC (709 AUC) como uma reforma do calendário romano por Júlio César.Foi escolhido após consulta com o astrônomo Sosigenes de Alexandria e provavelmente foi projetado para se aproximar do ano tropical (conhecido pelo menos desde Hiparco).consulte http://en.wikipedia.org/wiki/Julian_calendar
Solução
Se você apenas deseja remover ":", "" e "-" de um vetor de caracteres, isso será suficiente:
end <- gsub("[: -]", "" , begin, perl=TRUE)
#> end
#[1] "20010313103100"
Você deve ler a seção cerca de 1/4 do final em? regex sobre classes de caracteres .Como o "-" é especial nesse contexto como um operador de intervalo, ele precisa ser colocado em primeiro ou último lugar.
Depois de sua edição, a resposta é claramente o que @joran escreveu, exceto que você precisaria primeiro converter para uma classe DateTime:
as.numeric(as.POSIXct(begin))
#[1] 984497460
O outro ponto a fazer é que os operadores de comparação funcionam para variáveis classificadas Date e DateTime, de modo que a conversão pode não ser necessária.Isso compara 'início' a um tempo um segundo depois e informa corretamente que o início é antes:
as.POSIXct(begin) < as.POSIXct(begin) +1
#[1] TRUE
Outras dicas
Com base na pergunta revisada, isso deve fazer o que você deseja:
begin <- "2001-03-13 10:31:00"
as.numeric(as.POSIXct(begin))
O resultado é um carimbo de data / hora Unix, o número de segundos desde a época, assumindo que o carimbo de data / hora está no fuso horário local.
O exemplo da ajuda ?as.POSIX
fornece
as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S"))
então para você seria
as.numeric(as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S")))
Talvez isso também funcione:
library(lubridate)
...
df <- '24:00:00'
as.numeric(hms(df))
hms () irá converter seus dados de um formato de hora para outro, o que permitirá que você os converta em segundos.Veja a documentação completa.
Tentei fazer isso porque tive problemas com dados naquele formato, mas com mais de 24 horas.