【问题标题】:data subsetting around a specific date围绕特定日期的数据子集
【发布时间】:2015-10-23 22:48:03
【问题描述】:

我正在尝试调查某些特定日期前后股价波动的表现。所以我希望能够在给定日期之前和之后选择 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 年 9 月 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 in上面的例子,即 4 * 2 + 所选日期).....

欢迎任何帮助/指针。

【问题讨论】:

  • 这是矩阵还是xts对象?
  • 我的数据可以以 xts 或矩阵的形式出现,不管怎样让操作更容易......
  • 你通常不需要任何(额外的)包来解决这样的问题,因为日期在 R 中是可比较的。因此,它将沿着 x[x[,1] >= date1 & x[,1] <= date2]
  • 在你的代码中 date1 和 date2 是我展示的第二个系列的开始和结束日期......我的问题是我事先不知道这些日期是什么......股票价格仅存在于工作日,周末或节假日不存在。所以我不能将 date1/date 2 定义为我的初始日期 +/- 日期 1 或日期 2 可能是星期六、星期日或银行假日的点数....) .Basically 我想要的只是在我的初始系列中指定一个日期和我想要在此日期之前和之后的点数....如果这有任何意义

标签: r date subset


【解决方案1】:
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

【讨论】:

  • H Hubert,看起来更接近我想要得到的......但不知何故,第一行代码返回 df 作为 11 行乘 20 列的数据帧......所以第二行代码崩溃......但是 sapply(c(as.Pos... 对我来说似乎是正确的......非常感谢你,真的很感激
  • 以空格为分隔符的读取表不喜欢SO代码格式...现在应该更好
  • 嗨休伯特,这真的很棒,完全符合我的要求......非常感谢你,祝你周末愉快!
猜你喜欢
  • 2013-07-16
  • 2021-12-19
  • 2019-05-12
  • 2019-05-23
  • 1970-01-01
  • 2022-07-04
  • 2022-07-24
  • 2022-01-15
  • 2020-04-10
相关资源
最近更新 更多