2

如果我有一个包含多个系列的动物园对象,那么(称之为 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 以及自定义函数。是时候下注了。似乎它应该相对简单。有接盘侠吗?

4

1 回答 1

2

这并不能直接回答您的问题,因为您的问题是实现相同结果的迂回方法。你不需要这个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
于 2013-07-24T16:59:31.393 回答