Преобразование формата времени в числовое с помощью R - PullRequest
6 голосов
/ 16 января 2012

В большинстве случаев мы конвертируем числовое время в формат posixct, используя R. Однако иногда мы хотим сравнить, какой момент времени раньше, тогда мы бы предпочли числовой формат времени.Таким образом, это довольно практичный вопрос для преобразования формата времени в числовой.Например, у меня есть формат данных, такой как "2001-03-13 10:31:00",

  begin <- "2001-03-13 10:31:00"

Используя R, я хочу выяснить, как преобразовать его в числовое значение, например, юлианскийвремя, что-то вроде проходящих секунд между 1970-01-01 00:00:00 и 2001-03-13 10:31:00.

Есть ли у вас какие-либо предложения?


Юлианский календарь начался в 45 г. до н.э. (709 AUC) как реформа римского календаря Юлия Цезаря.Он был выбран после консультации с астрономом Сосигенс Александрийским и, вероятно, был разработан, чтобы приблизиться к тропическому году (известен, по крайней мере, со времен Гиппарха).см http://en.wikipedia.org/wiki/Julian_calendar

Ответы [ 3 ]

9 голосов
/ 16 января 2012

Если вы хотите удалить ":", "" и "-" из вектора символов, то этого будет достаточно:

end <- gsub("[: -]", "" , begin, perl=TRUE)
#> end
#[1] "20010313103100"

Вы должны прочитать раздел о 1/4 пути вниз в регулярном выражении о классах символов . Так как «-» является особенным в этом контексте как оператор диапазона, его нужно поместить первым или последним.

После того, как вы отредактируете, тогда ответ будет именно тем, что написал @joran, за исключением того, что вам сначала нужно будет преобразовать в класс DateTime:

 as.numeric(as.POSIXct(begin))
#[1] 984497460

Другой момент, который нужно сделать, это то, что операторы сравнения do работают для переменных класса Date и DateTime, поэтому преобразование может вообще не потребоваться. Это сравнивает «начало» со временем на одну секунду позже и правильно сообщает, что начало начинается раньше:

as.POSIXct(begin) < as.POSIXct(begin) +1
 #[1] TRUE
4 голосов
/ 19 июля 2016

На основании пересмотренного вопроса это должно делать то, что вы хотите:

begin <- "2001-03-13 10:31:00"
as.numeric(as.POSIXct(begin))

Результатом является метка времени Unix, количество секунд с начала эпохи, при условии, что метка времени находится в местном часовом поясе.

1 голос
/ 18 июля 2017

Пример из ?as.POSIX справки дает

as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S"))

так что для вас это будет

as.numeric(as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S")))
...