如果我有一个包含多个系列的动物园对象,如下所示(将其称为“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/