R语言 时间为00:00时xts的显示格式

ugmeyewa  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(149)

如果该时间步的时间是00:00,如何更改last的返回值的格式?
这里有一个例子
我有两个xts对象,其中包含要对齐的具有不同结束时间的每小时观测。

library(xts)

x <- c(1:10)
dt <- seq.POSIXt(from = as.POSIXct("2023-06-14 15:00", tz = "GMT"), by = "hour", length.out = 10)
x <- xts(x, order.by=dt)

y <- c(1:12)
dt <- seq.POSIXt(from = as.POSIXct("2023-06-14 15:00", tz = "GMT"), by = "hour", length.out = 12)
y <- xts(y, order.by=dt)

如果我打印x,我得到

x
                    [,1]
2023-06-14 15:00:00    1
2023-06-14 16:00:00    2
2023-06-14 17:00:00    3
2023-06-14 18:00:00    4
2023-06-14 19:00:00    5
2023-06-14 20:00:00    6
2023-06-14 21:00:00    7
2023-06-14 22:00:00    8
2023-06-14 23:00:00    9
2023-06-15 00:00:00   10

当打印y时,得到

y
                        [,1]
2023-06-14 15:00:00    1
2023-06-14 16:00:00    2
2023-06-14 17:00:00    3
2023-06-14 18:00:00    4
2023-06-14 19:00:00    5
2023-06-14 20:00:00    6
2023-06-14 21:00:00    7
2023-06-14 22:00:00    8
2023-06-14 23:00:00    9
2023-06-15 00:00:00   10
2023-06-15 01:00:00   11
2023-06-15 02:00:00   12

目前为止一切顺利。然而,如果使用last来确定时间序列的结束,我会得到一个没有时间的日期格式,而当确定y的最后一个条目时,情况并非如此:

last(index(x)) 
[1] "2023-06-15 GMT"

last(index(y))
[1] "2023-06-15 02:00:00 GMT"

如果我现在执行以下操作,y不会被x的扩展子集化,可能是因为时间格式:

y[paste(first(index(x)), last(index(x)), sep="/")]
                        [,1]
2023-06-14 15:00:00    1
2023-06-14 16:00:00    2
2023-06-14 17:00:00    3
2023-06-14 18:00:00    4
2023-06-14 19:00:00    5
2023-06-14 20:00:00    6
2023-06-14 21:00:00    7
2023-06-14 22:00:00    8
2023-06-14 23:00:00    9
2023-06-15 00:00:00   10
2023-06-15 01:00:00   11
2023-06-15 02:00:00   12
dtcbnfnu

dtcbnfnu1#

我建议你使用window函数:

all.equal(
  y["2023-06-14 15:00:00/2023-06-15 00:00:00"],
  window(y, start = first(index(x)), end = last(index(x)))
)
#[1] TRUE

跳过一圈一圈地创建需要在之后解析的字符串,这真的很难看,而且不像R。

zc0qhyus

zc0qhyus2#

你可以改变format并添加时区,如下所示:

library(xts)

x <- c(1:10)
dt <- seq.POSIXt(from = as.POSIXct("2023-06-14 15:00", tz = "GMT"), by = "hour", length.out = 10)
x <- xts(x, order.by=dt)

paste0(format(last(index(x)),"%Y-%m-%d %H:%M:%S"), " GMT")
#> [1] "2023-06-15 00:00:00 GMT"

创建于2023-06-14带有reprex v2.0.2

注意:输出为字符!

相关问题