R chron % в сравнении% распознает только каждую вторую дату

Я использую пакеты zoo и chron в R для чтения и преобразования данных. В какой-то момент мне нужно выбрать часть объекта зоопарка с индексированным хроном, которая соответствует другому объекту хрон. К сожалению, используя оператор% in%, я получаю только часть соответствующих дат. Вот MWE, который воспроизводит ошибку:

library(chron)
library(zoo)
chron1 <- seq(chron("2013-01-01","00:00:00", format=c(dates="y-m-d",times="h:m:s")),
              chron("2013-01-01","03:10:00", format=c(dates="y-m-d",times="h:m:s")),by=1./1440.)
x1 <- runif(200)
z1 <- zoo(x1,chron1)
chron10 <- trunc(chron1, "00:10:00")
x10 <- aggregate(z1,chron10,FUN=sum)
which(index(x10) %in% chron1)

(Неожиданный) вывод:

[1]  1  3  5  7  9 10 12 14 16 18 19

1 ответ

Решение

Объекты chron имеют плавающую точку, поэтому могут быть небольшие различия в том, что выглядит как одно и то же время в зависимости от того, как они были рассчитаны. format их и сравните те:

which(format(index(x10)) %in% format(chron1))
## [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

Это также работает как trunc использует eps значение, гарантирующее, что входы чуть менее одной минуты не будут усечены до следующей минуты. Увидеть ?trunc.times

which(trunc(index(x10), "minutes") %in% trunc(chron1, "minutes"))
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

Также см. R FAQ 7.31

Другие вопросы по тегам