【问题标题】:Adding a vector back as an extra xts file column添加一个向量作为额外的 xts 文件列
【发布时间】:2014-10-19 16:02:54
【问题描述】:

这是我第一次使用编码——也不是在财务方面。只是想学习 R。

我尝试计算 Google 历史数据的收盘价差异。问题是要应用一个函数(我敢打赌,这个函数已经预先打包了很多),我只能通过将 xts 文件的 Adjusted price 列转换为向量来使其工作。

我得到了我想要的,但现在我遇到了一个无法合并回 xts 文件以查找特定日期的向量:

getSymbols("GOOG")
head(GOOG)
z = as.vector(GOOG$GOOG.Adjusted)

D2D = function (x) {
                days = length(x)
                delta = numeric(days)
                for(i in 2:days){
                  delta[i] <- (100*((x[i] - x[i - 1])/(x[i - 1])))
                }
                delta
}
DELTA = D2D(z)
summary(DELTA)
GOOG_DELTA = append(0,DELTA)
merge(GOOG,GOOG_DELTA)

任何提示将不胜感激。

【问题讨论】:

    标签: r xts


    【解决方案1】:

    无需为此创建自定义函数,xtsquantmod 已经内置了矢量化函数来执行此操作。我觉得你在找这个:

    merge(GOOG,Ad((GOOG-lag(GOOG,1))/(lag(GOOG,1))))
    

    【讨论】:

      【解决方案2】:

      与此同时,我认为防止我遇到的问题的非常具体的方法是将 xts 文件作为一个整体转换为 data.frame(而不是分离列向量);对data.frame进行操作,并在尾部将结果合并到原始xts。

      这是一种可行的方法(注意:我将平均值赋予第一行,而不是“NA”):

      getSymbols("GOOG")
      str(GOOG) #We start with an xts
      z = as.data.frame(GOOG$GOOG.Adjusted)
      head(z)
      D2D = function (x) {
                      days = nrow(x)
                      delta = numeric(days)
                      for(i in 2:days){
                        delta[i] <- (100*((x[i,1] - x[i - 1,1])/(x[i - 1,1])))
                      }
                      delta
      }
      DELTA = D2D(z)
      head(DELTA)
      DELTA[1]<-mean(DELTA)
      head(DELTA)
      summary(DELTA)
      GOOG_D2D = merge(GOOG,DELTA)
      str(GOOG_D2D) #And we end with an xts file!
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        相关资源
        最近更新 更多