r - 如何合并动物园对象但使用滞后和变化的列?

标签 r time-series zoo

如果我有一个包含多个系列的动物园对象,如下所示(将其称为“zoo1”):

          'SPY'    'XLE'   'XLF'   'XLY'
1/1/2000   .002    .015    .005    .021 
2/1/2000   .051    .007    .070    .011
3/1/2000   .007    .102    .143    .095

另一个 (zoo2) 表示上述行的最大值(但不包括“SPY”列):

1/1/2000    'XLY'
2/1/2000    'XLF'
3/1/2000    'XLF'

如何获取一个动物园对象,该对象是来自zoo1的“SPY”值以及来自zoo1的值的配对,该列由zoo2中引用的列索引,但滞后(-1)个月。该任务的一般描述是,我希望将 SPY 的每月数量与上个月表现最佳的品种的同月数量配对。通过直观的例子:

           'SPY'   Current_Perf_Of_Prior_Month_Best_Performer
2/1/2000   .051    .011
3/1/2000   .007    .143

我尝试过建立索引,阅读了许多有关联接的文章,甚至下载并尝试使用包 sqldf 以及自定义函数。是时候下注了。看起来它应该相对简单。有接受者吗?

最佳答案

这并不能直接回答你的问题,因为你的问题是一种迂回的方式来达到相同的结果。您不需要 zoo2 对象。

# reproducible data
Lines <- 
"'Date'     'SPY'    'XLE'   'XLF'   'XLY'
1/1/2000   .002    .015    .005    .021 
2/1/2000   .051    .007    .070    .011
3/1/2000   .007    .102    .143    .095"
zoo1 <- read.zoo(text=Lines, header=TRUE, format="%m/%d/%Y")

# Get return at (t) for best performer at (t-1)
x <- rollapplyr(zoo1, 2, function(x) x[2,which.max(x[1,])], by.column=FALSE)
# merge with original data
merge(zoo1, x)
#              SPY   XLE   XLF   XLY curBestLag
# 2000-01-01 0.002 0.015 0.005 0.021         NA
# 2000-02-01 0.051 0.007 0.070 0.011      0.011
# 2000-03-01 0.007 0.102 0.143 0.095      0.143

关于r - 如何合并动物园对象但使用滞后和变化的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838836/

相关文章:

r - 在 rocker/r-devel-ubsan-clang 中安装 Rcpp

r - 从 1 个数据帧中的多个时间序列的开头和结尾有效地删除缺失值

r - 使用 xts/zoo R 绘制一天中不同时间的值

r - 使用Zoo包查找确定的数据组的最大值

r - 具有外生变量的 VAR

r - 如何总结指向线串并在 r 中保留数据框列?

r - 在 R 中生成所有可能的行组合?

r - 为什么 `row.names` 优于 `rownames` ?

python - Tensorflow 中间歇振荡器的 LSTM 时间序列预测

r - 如何在 R 或 Matlab 中将这个不规则间隔的时间序列转换(插值)为规则间隔的时间序列?