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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top