Нахождение секундных интервалов в R времени - PullRequest
3 голосов
/ 25 ноября 2011

Я просматривал некоторый пример кода в R, который получает последние данные за каждую секунду в объекте зоопарка (временные ряды).Я получаю код, работающий, но я не понимаю следующую строку:

time(tmp) <- as.integer(time(tmp) + 1e-7) + Epoch

Почему мы добавляем 1e-7 к значению времени?Вставить полный код здесь.Пожалуйста, помогите

library(zoo)
zsec <- structure(1:10, index = structure(c(1234760403.968, 1234760403.969,
            1234760403.969, 1234760405.029, 1234760405.029, 1234760405.03,
            1234760405.03, 1234760405.072, 1234760405.073, 1234760405.073
            ), class = c("POSIXt", "POSIXct"), tzone = ""), class = "zoo")

# tmp is zsec with time discretized into one second bins
tmp <- zsec
st <- start(tmp)
Epoch <- st - as.numeric(st)
time(tmp) <- as.integer(time(tmp) + 1e-7) + Epoch

# find index of last value in each one second interval
ix <- !duplicated(time(tmp), fromLast = TRUE)

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

Кажется, он ничего не делает.Если я удаляю член + 1e-7, R говорит мне, что я получаю ту же структуру

Я думаю, что это термин округления, используемый для исправления некоторой ошибки округления, которая может возникнуть.

   library(zoo) 
   zsec <- structure(1:10, index = structure(c(1234760403.968, 1234760403.969,             
                                               1234760403.969, 1234760405.029, 1234760405.029, 1234760405.03,             
                                               1234760405.03, 1234760405.072, 1234760405.073, 1234760405.073             
                                              ), class = c("POSIXt", "POSIXct"), tzone = ""), class = "zoo")  

   # tmp is zsec with time discretized into one second bins 
   tmp <- zsec 
   st <- start(tmp) 
   Epoch <- st - as.numeric(st) 
   time(tmp) <- as.integer(time(tmp) + 1e-7) + Epoch  

   # find index of last value in each one second interval 
   ix <- !duplicated(time(tmp), fromLast = TRUE) 
   time(tmp)[ix]

   tmp2 <- zsec 
   st <- start(tmp2) 
   Epoch <- st - as.numeric(st) 
   time(tmp2) <- as.integer(time(tmp2)) + Epoch 


   iy <- identical(time(tmp), time(tmp2))

iy <- идентично (время (tmp), время (tmp2)) </p>

iy

[1] TRUE

идентично ((as.integer (time)(tmp) + 9.99999e-1)), as.integer (время (tmp2)))

[1] TRUE

идентичный ((as.integer (время (tmp) + 9.999999)e-1)), as.integer (время (tmp2)))

[1] FALSE

0 голосов
/ 25 ноября 2011

Дикая спекуляция, но самая распространенная причина добавления к чему-то небольшого количества - избегать деления на ноль.Возможно, автор хотел, чтобы

time(tmp) - time(zsec)

дал ненулевые диапазоны.(Хотя обратите внимание, что time, похоже, не учитывает различия, поскольку они настолько малы, поэтому identical(zsec, tmp) возвращает TRUE.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...