R chron %in% 比较只识别每隔两个日期
R chron %in% comparison only recognizes every second date
我在 R 中使用 zoo 和 chron 包来读取和转换数据。有一次我需要 select 与另一个 chron 对象相对应的 chron-indexed zoo 对象的一部分。不幸的是,使用 %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
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
我在 R 中使用 zoo 和 chron 包来读取和转换数据。有一次我需要 select 与另一个 chron 对象相对应的 chron-indexed zoo 对象的一部分。不幸的是,使用 %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
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