R 特定日期前后的数据子集

R 特定日期前后的数据子集,r,date,subset,R,Date,Subset,我试图调查股票价格在特定日期前后的波动情况。所以我希望能够在给定日期之前和之后选择n个点。作为一个例子,如果我有以下系列: 1989-09-25 344.23 1989-09-26 344.33 1989-09-27 345.10 1989-09-28 348.60 1989-09-29 349.15 1989-10-02 350.87 1989-10-03 354.71 1989-10-04 356.94 1989-10-05 356.97 1989-10-06 358.7

我试图调查股票价格在特定日期前后的波动情况。所以我希望能够在给定日期之前和之后选择n个点。作为一个例子,如果我有以下系列:

1989-09-25  344.23
1989-09-26  344.33
1989-09-27  345.10
1989-09-28  348.60
1989-09-29  349.15
1989-10-02  350.87
1989-10-03  354.71
1989-10-04  356.94
1989-10-05  356.97
1989-10-06  358.78
1989-10-09  359.80
我感兴趣的日期是1989-09-29,范围是4天,函数将返回矩阵或xts对象,如下所示:

1989-09-25  344.23
1989-09-26  344.33
1989-09-27  345.10
1989-09-28  348.60
**1989-09-29  349.15**
1989-10-02  350.87
1989-10-03  354.71
1989-10-04  356.94
1989-10-05  356.97
有没有我可以使用的软件包或几行代码可以实现这个目的

理想情况下,正如我将有一个日期向量一样,函数将返回一个矩阵或一个xts对象,其中n列(即日期向量中的每个日期对应一列)为每列2 x n+1个观察值(在上面的示例中为9,即4*2+所选日期)


欢迎提供任何帮助/指针。

这是矩阵还是
xts
对象?我的数据可以是xts或矩阵,只要操作更简单……对于这样的问题,您通常不需要任何(额外)包,因为日期在R中是可比的。因此,它将沿着
x[x[,1]>=date1&x[,1]的路线在您的代码date1中,date2是我正在展示的第二个系列的开始和结束日期…我的问题是,我事先不知道这些日期是什么…股票价格只存在于工作日,而不存在于周末或假日。因此,我不能将date1/date2定义为我的初始日期+/-日期1或日期2可能是一个sarturda基本上,我想要的只是从我的初始系列中指定一个日期以及在此日期之前和之后我想要的点数…如果这有任何意义的话,Hubert,看起来更接近我想要的…但是不知何故,第一行代码返回df作为11行20列的数据帧…所以第二行代码行崩溃了…但是sapply(c)(as.Pos…)对我来说似乎是对的…非常感谢,非常感谢带空格的读取表作为分隔符,不喜欢这样的代码格式…现在应该更好了Hi Hubert,这真的非常好,完全符合我的要求…非常感谢,祝你周末愉快!
df <- read.table( row.names = NULL, sep=',', text="
1989-09-25,344.23
1989-09-26,344.33
1989-09-27,345.10
1989-09-28,348.60
1989-09-29,349.15
1989-10-02,350.87
1989-10-03,354.71
1989-10-04,356.94
1989-10-05,356.97
1989-10-06,358.78
1989-10-09,359.80")
df[,1] <- as.POSIXct(df[,1])
dt <- as.POSIXct('1989-09-29')
idx <- which(df[,1]==dt)
seqidx <- seq(idx, idx+2*4)-4
df[seqidx,2]

[1] 344.23 344.33 345.10 348.60 349.15 350.87 354.71 356.94 356.97
sapply(c(as.POSIXct('1989-09-29'), as.POSIXct('1989-10-02')), 
       FUN=function(dt) {df[seq(which(df[,1]==dt),which(df[,1]==dt)+2*4)-4,2]})


        [,1]   [,2]
 [1,] 344.23 344.33
 [2,] 344.33 345.10
 [3,] 345.10 348.60
 [4,] 348.60 349.15
 [5,] 349.15 350.87
 [6,] 350.87 354.71
 [7,] 354.71 356.94
 [8,] 356.94 356.97
 [9,] 356.97 358.78