使用日期结构略有不同的 xts

Using xts with slightly different date structures

我正致力于在 R 中实现财务模型。我正在使用 quantmod::getSymbols(),它返回一个 xts 对象。我同时使用来自 google(或 yahoo)的股票数据和来自 FRED 的 economic/yield 数据。现在我在尝试进行比较时收到不一致数组的错误。

require(quantmod)
fiveYearsAgo = Sys.Date() - (365 * 5)
bondIndex <- getSymbols("LQD",src="google",from = fiveYearsAgo, auto.assign = FALSE)[,c(0,4)]

bondIndex$score <- 0

bondIndex$low <- runMin(bondIndex,365)
bondIndex$high <- runMax(bondIndex,365)

bondIndex$score <- ifelse(bondIndex > (bondIndex$low * 1.006), bondIndex$score + 1, bondIndex$score)
# Error in `>.default`(bondIndex, (bondIndex$low * 1.006)) : 
#   non-conformable arrays 
bondIndex$score <- ifelse(bondIndex < (bondIndex$high * .994), bondIndex$score - 1, bondIndex$score)
# Error in `<.default`(bondIndex, (bondIndex$high * 0.994)) : 
#   non-conformable arrays
print (bondIndex$score)

我在违规行之前添加了以下内容:

print (length(bondIndex))
print (length(bondIndex$low))
print (length(bondIndex$high))

我的结果是 5024、1256 和 1256。我希望它们的长度相同,每天都有收盘价、52 周高点和 52 周低点。我还想添加更多数据,以便这些天也有 50 天移动平均线。更进一步,真正阻碍我进步的是实施来自 FRED 的产量数据。我的理论是股票和债券市场有不同的假期,导致天数略有不同。在这种情况下,我想 na.spline() 丢失的数据。

我知道我正在走这条错误的路,做我正在尝试的事情的最佳方法是什么?我想让每一行都是一天,然后有收盘价、高价、低价、移动平均线、当天的一些不同收益率的列,最后是 "score" 具有基于其他数据的日值那天。

感谢您的帮助,如果您想要或需要更多信息,请告诉我。

你需要告诉你的声明你想要什么变量。现在你问的是 bondIndex 是大于还是小于 low 或 high。这没有意义。大概你想要 bondIndex[,1] 又名 bondIndex$LQD.Close:

bondIndex$score <- ifelse(bondIndex[,1] > (bondIndex$low * 1.006), bondIndex$score + 1, bondIndex$score)
bondIndex$score <- ifelse(bondIndex[,1] < (bondIndex$high * .994), bondIndex$score - 1, bondIndex$score)

附带说明一下,Sys.Date() - (365 * 5) 不是五年前(提示,闰年)。这将是一个可能会咬你的错误。