【问题标题】:R Compare two XTS is losing last dateR比较两个XTS正在丢失最后一个日期
【发布时间】:2021-06-08 04:38:29
【问题描述】:

我有两个相同日期的 XTS。当我比较两者时,结果消除了最后一行: 例如,a 和 b 都有 20 个日期和一个列。 a>b 但是只给出 19 行

a <- structure(c(2433.3, 2423, 2408.85, 2390, 2592.25, 2492.95, 2447, 
2397, 2298.95, 2286, 2306.3, 2301.8, 2342, 2341, 2328, 2338, 
2302.95, 2322.05, 2360, 2353.7), class = c("xts", "zoo"), index = structure(c(1613001600, 
1613088000, 1613347200, 1613433600, 1613520000, 1613606400, 1613692800, 
1613952000, 1614038400, 1614124800, 1614211200, 1614297600, 1614556800, 
1614643200, 1614729600, 1614816000, 1614902400, 1615161600, 1615248000, 
1615357396), tzone = "UTC", tclass = "Date"), .Dim = c(20L, 1L
), .Dimnames = list(NULL, "Close"))


b <- structure(c(2410, 2390.1, 2391.4, 2445, 2426.05, 2415.9, 2390, 
2617.6, 2492, 2474.8, 2430, 2330, 2320, 2280, 2342.25, 2346, 
2342.05, 2318, 2338, 2310), class = c("xts", "zoo"), index = structure(c(1613001600, 
1613088000, 1613347200, 1613433600, 1613520000, 1613606400, 1613692800, 
1613952000, 1614038400, 1614124800, 1614211200, 1614297600, 1614556800, 
1614643200, 1614729600, 1614816000, 1614902400, 1615161600, 1615248000, 
1615334400), tzone = "UTC", tclass = "Date"), .Dim = c(20L, 1L
), .Dimnames = list(NULL, "Lag.2"))

a>b

dput (a>b)
structure(c(TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, 
FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, 
TRUE, TRUE), .Dim = c(19L, 1L), .Dimnames = list(NULL, "Close"), index = structure(c(1613001600, 
1613088000, 1613347200, 1613433600, 1613520000, 1613606400, 1613692800, 
1613952000, 1614038400, 1614124800, 1614211200, 1614297600, 1614556800, 
1614643200, 1614729600, 1614816000, 1614902400, 1615161600, 1615248000
), tzone = "UTC", tclass = "Date"), class = c("xts", "zoo"))

【问题讨论】:

    标签: r xts


    【解决方案1】:

    很难发现但是a的索引和b的索引有区别 a和b的最后一个时间戳是:

    a = 1615357396

    b = 1615334400

    如果你格式化它们以查看它们是什么:

    format(as.POSIXct(1615357396, tz = "UTC", origin = "1970-01-01"), "%Y-%m-%d %H:%M:%S")
    [1] "2021-03-10 00:00:00"
    format(as.POSIXct(1615334400, tz = "UTC", origin = "1970-01-01"), "%Y-%m-%d %H:%M:%S")
    [1] "2021-03-10 06:23:16"
    

    如您所见,这是 2 个不同的时间戳。如果你合并 a 并基于你所得到的:

     merge(a, b)
                 Close   Lag.2
    2021-02-11 2433.30 2410.00
    2021-02-12 2423.00 2390.10
    2021-02-15 2408.85 2391.40
    2021-02-16 2390.00 2445.00
    2021-02-17 2592.25 2426.05
    2021-02-18 2492.95 2415.90
    2021-02-19 2447.00 2390.00
    2021-02-22 2397.00 2617.60
    2021-02-23 2298.95 2492.00
    2021-02-24 2286.00 2474.80
    2021-02-25 2306.30 2430.00
    2021-02-26 2301.80 2330.00
    2021-03-01 2342.00 2320.00
    2021-03-02 2341.00 2280.00
    2021-03-03 2328.00 2342.25
    2021-03-04 2338.00 2346.00
    2021-03-05 2302.95 2342.05
    2021-03-08 2322.05 2318.00
    2021-03-09 2360.00 2338.00
    2021-03-10      NA 2310.00
    2021-03-10 2353.70      NA
    

    您可以看到最后 2 条记录的日期相同,但索引日期不同。如果您比较 a > b,您正在与 NA 比较,这些记录将被删除。

    解决此问题的一种方法是在比较之前执行as.xts

    as.xts(a) > as.xts(b)
               Close
    2021-02-11  TRUE
    2021-02-12  TRUE
    2021-02-15  TRUE
    2021-02-16 FALSE
    2021-02-17  TRUE
    2021-02-18  TRUE
    2021-02-19  TRUE
    2021-02-22 FALSE
    2021-02-23 FALSE
    2021-02-24 FALSE
    2021-02-25 FALSE
    2021-02-26 FALSE
    2021-03-01  TRUE
    2021-03-02  TRUE
    2021-03-03 FALSE
    2021-03-04 FALSE
    2021-03-05 FALSE
    2021-03-08  TRUE
    2021-03-09  TRUE
    2021-03-10  TRUE
    

    最好首先确保您拥有正确的时间戳。但这取决于输入数据的来源。

    【讨论】:

    • 谢谢。为了从底层数据源中删除时间部分,我曾经在原始 xts 上使用 to.daily(),现在两个 xts 在索引中具有相同的时间戳,并且比较工作正常。我是该网站的新手,所以不能投票 - 但真诚的感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多