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