是否可以一次性为日期和时间范围分配xts系列?例如,在下面的系列中,我想仅为6:30-6:50选择行,并且仅针对一个月的01-04(或者更好的是,一个月的前4个数据日期,但这是一个无关的问题)。
spy[,ohlcv]
open high low close volume
2016-05-19 06:30:00 204.030 204.300 203.900 204.100 537530
2016-05-19 06:35:00 204.100 204.340 204.010 204.240 482436
2016-05-19 06:40:00 204.250 204.540 204.240 204.530 441800
...
2016-05-20 06:30:00 204.960 205.250 204.860 205.170 564441
2016-05-20 06:35:00 205.170 205.410 205.170 205.250 593626
2016-05-20 06:40:00 205.260 205.440 205.240 205.350 342840
...
我看到范围选择here和here的一些答案非常有用,但是没有显示在索引上设置多个并发约束 - 这将更具可读性。目前我正在通过缩写
来管理这个(temp1 <- as.character(index(spy), format="%H:%M")) >= "06:30" & temp1 <= "06:50" -> set1
as.character(index(spy), format="%d") < "05" -> set2
then, spy[set1 & set2, ]
答案 0 :(得分:2)
没有办法将两种功能结合起来。您可以做的一件事是使用split
将数据分成每月块,然后使用first
获取每月的前4个观察值。然后,您可以使用时间子集来获取特定的时间间隔。
require(xts)
times <- seq(as.POSIXct("2016-05-19 04:30:00"),
as.POSIXct("2016-05-20 07:40:00"), by="5 min")
set.seed(21)
x <- xts(rnorm(length(times)), times)
# get the first 4 days' observations for each month
y <- do.call(rbind, lapply(split(x, "months"), first, n="4 days"))
# subset by time interval
y["T06:30:00/T06:50:00"]
答案 1 :(得分:1)
根据我以前的评论,您可以尝试以下方式:
=SUMIFS(Sheet4!C:C;Sheet4!A:A;B2;Sheet4!B:B;C2)
基本上我们只是按照我们想要的月/小时/分钟进行分组。