根据 data.frame 行名中的日期从 xts 对象中提取值

Extract values from an xts object based on dates in data.frame rownames

我正在进行多周期分析,我需要从名为 data.

的 xts 对象中提取两个日期之间的值

我计算的开始和结束都在这些日期之间。这些相同的日期在名为 results.

的 data.frame 中用作 rownames
start_date <- head(rownames(results), n=1)
end_date <- tail(rownames(results), n=1) 

我也用这个向量识别列名:

> col_names
[1] "Stock1" "Stock2" "Stock3" 

我需要在 col_namesstart_dateend_date 之间的列中的 data 对象中提取观察值。

假设 'start_date' 和 'end_date' 是 'character' 格式的 'Date' 向量('%Y-%m-%d'),我们 paste 它们与 sep='/' 一起用作行索引,将 'col_names' 指定为列索引并将 xts 对象 'data'.

的子集
data[paste(start_date, end_date, sep="/"), col_names]

作为可重现的例子

library(xts)
data(sample.xts)
start_date <- '2007-01-02'
end_date <- '2007-01-05' 
col_names <-  c('Open', 'High')
sample.xts[paste(start_date, end_date, sep="/"), col_names]
#               Open     High
#2007-01-02 50.03978 50.11778
#2007-01-03 50.23050 50.42188
#2007-01-04 50.42096 50.42096
#2007-01-05 50.37347 50.37347

如果我们需要 'start_date' 和 'end_date'

之间的行
sample.xts[index(sample.xts) > start_date &
            index(sample.xts) < end_date, col_names]
#               Open     High
#2007-01-03 50.23050 50.42188
#2007-01-04 50.42096 50.42096