R 具有修改的其他xts对象索引的xts对象子集

R 具有修改的其他xts对象索引的xts对象子集,r,xts,R,Xts,我需要从一个xts对象a中提取一个子集,其中包含另一个xts对象b的所有日期,以及b中每个日期的一组相邻日期。相邻日期可以是b中每个日期之前的n日期和之后的k日期 例如: a <- structure(c(9L, 10L, 11L, 15L, 18L, 12L, 13L, 18L, 19L, 19L, 22L, 25L), .Dim = c(12L, 1L), index = structure(c(951696000, 951868800, 951955200, 95204160

我需要从一个xts对象
a
中提取一个子集,其中包含另一个xts对象
b
的所有日期,以及
b
中每个日期的一组相邻日期。相邻日期可以是
b
中每个日期之前的
n
日期和之后的
k
日期

例如:

a <- structure(c(9L, 10L, 11L, 15L, 18L, 12L, 13L, 18L, 19L, 19L, 22L, 25L),
  .Dim = c(12L, 1L), index = structure(c(951696000, 951868800, 951955200,
  952041600, 952128000, 952214400, 952300800, 952387200, 952473600, 952560000,
  952646400, 952732800), tzone = "UTC", tclass = "Date"), class = c("xts", "zoo"),
  .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC")

b <- structure(1:2, .Dim = c(2L, 1L), index = structure(c(952041600, 952560000),
  tzone = "UTC", tclass = "Date"), class = c("xts", "zoo"), .indexCLASS = "Date",
  tclass = "Date", .indexTZ = "UTC", tzone = "UTC")
n <- 2
k <- 1
我在
b
中得到每个日期,然后是前两个日期和后一个日期。我知道,例如:

a[index(b)] 
我在
b
中获取日期。但是我找不到一种方法(可能是有效的!)来选择它们旁边的日期。

如果你的字面意思是“相邻日期”,你可以从
索引(b)
的每个元素中添加
n
和减去
k

在您的案例中,这两种方法产生相同的结果,但如果
a
不包含连续的日期,则结果会有所不同

a[index(b)] 
i <- c(0,-seq(n),seq(k))
# repeat index(b) for each value we want: 1) actual value, 2) -n, 3) +k
idx <- rep(index(b), each=length(i)) + i
o <- a[idx,]
i <- c(0,-seq(n),seq(k))
b.in.a <- a[index(b), which.i=TRUE]
# repeat b.in.a for each value we want: 1) actual value, 2) -n, 3) +k
idx <- rep(b.in.a, each=length(i)) + i
o <- a[idx,]