特定日期

时间:2015-10-23 22:48:03

标签: 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.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 xn + 1个观察值(所以9 in上面的例子,即4 * 2 +所选日期).....

欢迎任何帮助/指针。

1 个答案:

答案 0 :(得分:0)

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