我正在尝试调查某些特定日期之前和之后股票价格波动的情况。所以我希望能够在给定日期之前和之后选择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 +所选日期).....
欢迎任何帮助/指针。
答案 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