根据 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_names
和 start_date
和 end_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
我正在进行多周期分析,我需要从名为 data
.
我计算的开始和结束都在这些日期之间。这些相同的日期在名为 results
.
rownames
start_date <- head(rownames(results), n=1)
end_date <- tail(rownames(results), n=1)
我也用这个向量识别列名:
> col_names
[1] "Stock1" "Stock2" "Stock3"
我需要在 col_names
和 start_date
和 end_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