我不确定我的动物园对象发生了什么。我试图将另一列绑定(bind)到我的动物园对象,突然我的索引爆炸了。这是我尝试过的:
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从何而来?它从来不在原始动物园对象中(在我绑定(bind)新列之前)
最佳答案
如果我们把例子缩小一点,会更容易看出。下面的代码将第二个参数强制转换为 zoo
类对象,给出 zoo(as.character(11:13), 1:3)
,然后强制转换为第二个参数 (integer
) 与第一个参数 (Date
) 具有相同的索引类。该警告消息确实警告正在使用不同的索引类别。
cbind.zoo
确实有特殊的处理来处理普通向量,但前提是它们与动物园对象的核心数据具有相同的类型。如果使用相同类型的普通向量作为第一个参数的核心数据,即都是数字
,它就会按预期工作。标记为正确
的注释行显示了这一点。
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"
关于r - 当我尝试 cbind 时,zoo 对象只是插入了随机行。发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55130609/