-1

是否有可能在 xts 中对秒进行子集化?

2013-01-01 00:01:00 2.2560000
2013-01-01 00:02:00 2.3883333
2013-01-01 00:03:00 1.8450000
2013-01-01 00:04:00 1.6966667
2013-01-01 00:04:03 1.3100000
2013-01-01 00:05:00 0.8533333

我想得到最后没有 :00 秒的线路!

2013-01-01 00:04:03 1.3100000

通常我会按时间 [T09:00/T09:30] 进行子集化,但现在我希望这些行没有带有 00 秒的时间戳。谢谢!

4

1 回答 1

1

首先,我必须将您的示例数据放入 R 中(请dput下次使用)

lines <- '2013-01-01 00:01:00 2.2560000
2013-01-01 00:02:00 2.3883333
2013-01-01 00:03:00 1.8450000
2013-01-01 00:04:00 1.6966667
2013-01-01 00:04:03 1.3100000
2013-01-01 00:05:00 0.8533333'

tmp <- read.table(text=lines)
x <- xts(tmp[, 3], as.POSIXct(paste(tmp[, 1], tmp[, 2])))

您可以使用该.indexsec函数提取第二个为(或不是)0 的行。

x[.indexsec(x) == 0]
#                         [,1]
#2013-01-01 00:01:00 2.2560000
#2013-01-01 00:02:00 2.3883333
#2013-01-01 00:03:00 1.8450000
#2013-01-01 00:04:00 1.6966667
#2013-01-01 00:05:00 0.8533333

x[.indexsec(x) != 0]
#                    [,1]
#2013-01-01 00:04:03 1.31

另一个想法是使用xts:::startof类似于函数的未导出endpoints函数。

x[xts:::startof(x, "mins")]
#                         [,1]
#2013-01-01 00:01:00 2.2560000
#2013-01-01 00:02:00 2.3883333
#2013-01-01 00:03:00 1.8450000
#2013-01-01 00:04:00 1.6966667
#2013-01-01 00:05:00 0.8533333

或者,如果您只有一个不以 00 结尾的行,则可以使用负子集:

x[-xts:::startof(x, "mins")]
#                    [,1]
#2013-01-01 00:04:03 1.31

这是通过与具有所需索引的零宽度 xts 对象合并来实现的方法。

merge(xts(, seq(start(x), end(x), by="min")), x, all=FALSE)
#                            x
#2013-01-01 00:01:00 2.2560000
#2013-01-01 00:02:00 2.3883333
#2013-01-01 00:03:00 1.8450000
#2013-01-01 00:04:00 1.6966667
#2013-01-01 00:05:00 0.8533333
于 2013-05-28T16:03:28.790 回答