微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

rbind.zoo(...) 的问题:滞后函数中的索引重叠

如何解决rbind.zoo(...) 的问题:滞后函数中的索引重叠

我在使用 lag.zoo 函数时遇到了动物园错误

rbind.zoo(...) 中的错误:索引重叠 警告:在 zoo(rval[i],index(x)[i]) 中: 如果“order.by”中的索引条目不唯一,“zoo”对象的某些方法将不起作用

t1<-c("21.04.2019 20:00:00","21.04.2019 20:01:00","21.04.2019 20:02:00","21.04.2019 20:03:00","21.04.2019 20:04:00","21.04.2019 20:05:00","21.04.2019 20:06:00","21.04.2019 20:07:00","21.04.2019 20:08:00","21.04.2019 20:09:00","21.04.2019 20:10:00","21.04.2019 20:11:00")

v1<-c(15,15,14,14)

z1<-zoo(v1,as.POSIXct(strptime((t1),"%d.%m.%Y %H:%M:%s")))

head(lag(z1[,1],2))

使用 k=1 可以无延迟地返回原始时间(并且没有错误和警告)

解决方法

有几个问题:

  • 也许 dplyr 已加载。它从 R 的基础中破坏了 lag,因此没有其他包可以使用它。当您加载 dplyr 时,请这样做:

    library(dplyr,exclude = c("lag","filter"))
    

    如果您需要使用 dplyr 的 lag 则将其称为 dplyr::lag 。虽然以上可能是处理此问题以避免错误的最佳方法,但如果您已经加载了 dplyr 以至于为时已晚,您可以:

    1. 分离它,detach("package:dplyr",unload = TRUE),或
    2. 使用 stats::lag 来引用基 R 中的 lag 泛型,它反过来会调度 lag.zoo,因为 zoo 与其一致工作或
    3. 输入 lag <- stats::lag,然后像往常一样使用 lag,如果您需要该版本,请使用 dplyr::lag
  • z1 是矢量动物园对象,而不是矩阵动物园对象,因此引用其第一列实际上没有意义。它没有列。省略 [,1] .

  • 你可能是说 -2,而不是 +2。 zoo 使用与 R 本身相同的约定,即滞后 2 是指将索引而不是数据滞后 2。也就是说,滞后 2 的系列更早开始,而您可能希望它更晚开始。有关这方面的更多信息,请参阅 ?stats::lag。例如,在下面的负滞后中,第 1 个滞后在一个位置后开始,第 2 个滞后在 2 个位置后开始。

    stats::lag(z1,-(0:2))
    
    ##                     lag0 lag-1 lag-2
    ## 2019-04-21 20:00:00   15    NA    NA
    ## 2019-04-21 20:01:00   15    15    NA
    ## 2019-04-21 20:02:00   15    15    15
    ## 2019-04-21 20:03:00   14    15    15
    ## 2019-04-21 20:04:00   15    14    15
    ## 2019-04-21 20:05:00   14    15    14
    ## 2019-04-21 20:06:00   15    14    15
    ## 2019-04-21 20:07:00   14    15    14
    ## 2019-04-21 20:08:00   15    14    15
    ## 2019-04-21 20:09:00   15    15    14
    ## 2019-04-21 20:10:00   15    15    15
    ## 2019-04-21 20:11:00   14    15    15
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。