xts 基于zoo,动物园常见问题解答(问题 4)有关于不同数据类型的这一行:
“动物园”对象可以是 (1) 数值向量,(2) 数值矩阵或
(3) 一个因子,但不能同时包含数值向量和因子。
所以只要你的 0 和 1 是 numeric,而不是 factor,你应该没问题。它不是一种非常高效的存储介质,但存储效率可能不是您的瓶颈。
一个例子:
timestamp <- seq.POSIXt(from=as.POSIXct("2016-10-12 09:00"),
to=as.POSIXct("2016-10-13 09:00"),
by="min")
dat <- rnorm(length(timestamp))
foo <- xts(dat,order.by=timestamp)
现在那个指标变量:
#make this example reproducible:
set.seed(123)
dummy2 <- sample(c("event","non-event"), size=length(timestamp),
replace=TRUE)
foo2 <- xts(dummy2, order.by=timestamp)
merged <- cbind(foo, foo2)
这警告你:
In merge.xts(..., all = all, fill = fill, suffixes = suffixes) :
NAs introduced by coercion
确实:
summary(merged)
Index ..1 ..2
Min. :2016-10-12 09:00:00 Min. :-3.38110 Min. : NA
1st Qu.:2016-10-12 15:00:00 1st Qu.:-0.64010 1st Qu.: NA
Median :2016-10-12 21:00:00 Median : 0.04047 Median : NA
Mean :2016-10-12 21:00:00 Mean : 0.03025 Mean :NaN
3rd Qu.:2016-10-13 03:00:00 3rd Qu.: 0.67461 3rd Qu.: NA
Max. :2016-10-13 09:00:00 Max. : 3.25034 Max. : NA
NA's :1441
但如果是数字:
dummy3 <- sample(0:1, size=length(timestamp), replace=TRUE)
foo3 <- xts(dummy3, order.by=timestamp)
merged <- cbind(foo, foo3)
默默返回(没有消息就是好消息)。让我们看看:
summary(merged)
Index ..1 ..2
Min. :2016-10-12 09:00:00 Min. :-3.38110 Min. :0.0000
1st Qu.:2016-10-12 15:00:00 1st Qu.:-0.64010 1st Qu.:0.0000
Median :2016-10-12 21:00:00 Median : 0.04047 Median :0.0000
Mean :2016-10-12 21:00:00 Mean : 0.03025 Mean :0.4983
3rd Qu.:2016-10-13 03:00:00 3rd Qu.: 0.67461 3rd Qu.:1.0000
Max. :2016-10-13 09:00:00 Max. : 3.25034 Max. :1.0000
由于第 2 列是数字,我们不使用相等进行比较;如果这对您来说不直观,请查看 R Inferno 的圈子之一(注意:PDF)。
summary(merged[merged[,2] > 0.5 ,1] )
summary(merged[merged[,2] < 0.5 ,1] )
可能有一种更优雅的方式来做这件事,但它会让你开始。
如果您打算与xts 一起工作,我推荐xts 的作者的建议:
xts 对象的核心是同一个包中的 zoo 对象
姓名。 ...动物园对象周围的大部分细节同样适用于
xts。因为简单地复述优秀的介绍性动物园是多余的
小插图,建议读者阅读、吸收和重新阅读该文档
以最好地了解此类的力量。