首页 > 解决方案 > rbind.zoo(...) 的问题:索引在滞后函数中重叠

问题描述

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

rbind.zoo(...) 中的错误:索引重叠警告:在 zoo(rval[i], index(x)[i]) 中:如果索引条目按 'order. by' 不是唯一的

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,15,14,15,14,15,14,15,15,15,14)

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

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

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

标签: rlagzoo

解决方案


有几个问题:

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

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

    如果您需要使用 dplyr lag,请将其称为dplyr::lag. 尽管上面可能是处理此问题以避免错误的最佳方法,但如果您已经加载了 dplyr 以致为时已晚,您可以:

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

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

    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
    

推荐阅读