r - 当我尝试 cbind 时,zoo 对象只是插入了随机行。发生了什么?

标签 r zoo

我不确定我的动物园对象发生了什么。我试图将另一列绑定(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/

相关文章:

R 管道工 API : Prevent "504 Gateway Time-out"

r - 将从 PRISM 下载的气候数据堆叠在 R 中

r - data.table 在控制台中工作,但 R CMD INSTALL 失败

R中的滚动回归xts对象

r - 限制zoo包中的na.locf

r - 对组进行抽样以匹配预期比例的算法

R 包命名空间

读取带/不带空格和数字的混合文本的不规则格式文本文件

r - 将 xts 或 zoo 时间序列对象的每一行除以固定行

r - 缺少值时使用rollmean(NA)