【问题标题】:Merging a lot of xts objects合并很多 xts 对象
【发布时间】:2017-09-16 15:30:12
【问题描述】:

我有一些“xts”对象,将近 600 个,我想将它们合并到一个“xts”对象中。

这些对象的名称类似于 mfi0、mfi1、mfi2、...。 我可以为一些对象编写合并命令,例如

a<-merge(mfi0,mfi1,mfi2) 

但我的问题是我无法为包含字符串“mfi”和数字的 600 个对象编写 looplapply,我尝试了 paste 但无法编写。

【问题讨论】:

  • obj &lt;- paste0("mfi", 1:600); obj_list&lt;- lapply(obj, get); do.call(merge, obj_list)
  • 或者,code &lt;- paste0("merge(", paste0("mfi", 1:600, collapse=","), ")"); eval(parse(text=code))
  • 它确实有效。非常感谢你。

标签: r xts


【解决方案1】:

这些对象从何而来?在生成过程中最好使用一个列表而不是 600 个单独的变量。因此,您应该拥有mfi[1]mfi[2]、...、mfi[600],而不是mfi0mfi1、...、mfi600

拥有所有数据对处理数据有很大帮助。使用您的自己的合并命令,合并过程现在变得更加简单:

merged_mfi <- do.call(merge, mfi)

或者使用只处理两个对象的合并命令(即 data.frames 的 R 合并):

merged_mfi <- Reduce(merge, mfi[2:length(mfi)], mfi[1])

【讨论】:

  • 我想计算 636 个代码的资金流指数(MFI),我用 pdfetch 包 sp&lt;- pdfetch_YAHOO(identifiers[1:636], c("high","low","close","volume",from = as.Date("2012-01-01"), to = as.Date("2016-12-30") 获取代码,然后我使用 TTR 包中的 MFI,我写了两个函数,HLC&lt;-function(i){sp[,(1+(4*i)):(3+(4*i))]} Volume&lt;-function(i){sp[,4*i+4]} @ 987654331@for(i in 0:636) { nam &lt;- paste("mfi", i, sep = "") assign(nam,MFI(HLC(i),Volume(i),14)) }
  • 在初始化 mfi &lt;- list() 之后,您可以使用 mfi[i] &lt;- MFI(...) 而不是 assign(nam, MFI(...))
  • 几乎在任何情况下,在执行代码时生成变量名都是不好的做法。在这种情况下使用列表、数组、矩阵、data.frames、集合、字典或任何类似的数据结构。
【解决方案2】:

将所有 xts 对象放在列表 list.xts 中。在您的情况下,它将是一个包含 600 个元素的列表,每个元素都是一个 xts 对象。然后你可以简单地使用

a = Reduce(f=merge.xts, list.xts)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 2012-08-15
    • 2014-05-07
    • 2012-08-31
    • 2012-08-19
    • 2020-11-06
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多