我不确定我的动物园对象发生了什么。我试图将另一列绑定到我的zoo对象,突然我的索引爆炸了。这是我尝试过的:
dates.zoo <- zoo(data.frame(val=seq(1:121)), order.by = seq.Date(as.Date('2018-12-01'), as.Date('2019-03-31'), "days"))
cbind(dates.zoo, ti=as.character(1:nrow(dates.zoo)))
val ti
1970-01-02 <NA> 1
1970-01-03 <NA> 2
1970-01-04 <NA> 3
1970-01-05 <NA> 4
...
1970年从哪里来?它从来没有在原始的zoo对象中(在我绑定一个新列之前)
如果我们将示例缩小,则会更容易一些。下面的代码强制给出zoo
的zoo(as.character(11:13), 1:3)
类对象的第二个参数,然后它强制第二个参数(integer
)的索引类与第一个参数(Date
)具有相同的索引类。警告消息确实警告正在使用不同的索引类。
cbind.zoo
确实有处理普通向量的特殊处理,但前提是它们与动物园对象的核心数据类型相同。如果使用与第一个参数的核心数据相同类型的普通向量,即两个numeric
,它将按预期工作。标有correct
的注释掉的线显示了这一点。
library(zoo)
dates.zoo <- zoo(data.frame(val= 1:3), as.Date('2019-01-03') + 0:2)
# cbind(dates.zoo, ti=11:13) # correct
cbind(dates.zoo, ti=as.character(11:13)) # incorrect
这使:
val ti
1970-01-02 <NA> 11
1970-01-03 <NA> 12
1970-01-04 <NA> 13
2019-01-03 1 <NA>
2019-01-04 2 <NA>
2019-01-05 3 <NA>
Warning message:
In merge.zoo(..., all = all, fill = fill, suffixes = suffixes, retclass = "zoo", :
Index vectors are of different classes: Date integer
另请注意:
as.Date(1:3)
## [1] "1970-01-02" "1970-01-03" "1970-01-04"