是否有可能在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秒。谢谢!
答案 0 :(得分: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