【问题标题】:collection answers by inserting them into a dataframe or vector通过将答案插入数据框或向量来收集答案
【发布时间】:2012-06-27 10:52:04
【问题描述】:

我想知道是否可以将一堆不同的计算答案分组到一个向量中?我有 30 次计算(我在这里显示了前 3 次的答案),并且我想将它们全部分组到一个向量甚至数据框中,以便保留股票名称。目标是按价格降序对它们进行排序

             AXP.Close
2002-06-20 0.008553863

第二个答案我想插入向量甚至数据框内

             BA.Close
2002-06-20 0.01553576

第三个答案我想插入向量甚至数据框内

            DIS.Close
2002-06-20 0.01073620

更多细节

谢谢你们的回答,你说得对,我应该提供更多细节:

所以基本上我试图计算和排序道琼斯指数中 30 只股票的收益率,我不能使用 yahooQF("Dividend Yield") 因为它没有选择收益率的选项以 2002 年为例

x = c("AAPL","ADBE","ADP")
Yield<-getQuote(x, what = yahooQF("Dividend Yield"))

所以我试图通过分别获得一年时间跨度的股息和期末的价格来获得它,而不是进行除法

s = c("VOD","ADP", etc)
getSymbols(s, from="2009-06-20", to="2009-06-22")
ClosePrices <- do.call(merge, lapply(s, function(x) Cl(get(x))))
sum(getDividends("ADP",from = "2008-06-29", to="2009-06-20")) /ClosePrices[,1]

现在的目标是将所有计算出的收益率放在一个向量中(股票名称应该保留)并按降序排列!非常感谢您的帮助

【问题讨论】:

    标签: r


    【解决方案1】:

    首先,我将制作一些看起来像你描述的东西:

    s <- c("AXP", "BA", "DIS")
    getSymbols(s, src='yahoo', from='2012-06-19', to='2012-06-20')
    L <- lapply(s, function(x) ROC(Cl(get(x)), na.pad=FALSE))
    L
    [[1]]
                 AXP.Close
    2012-06-20 0.008742843
    
    [[2]]
                  BA.Close
    2012-06-20 0.001233468
    
    [[3]]
                 DIS.Close
    2012-06-20 0.004619916
    

    现在,按列组合结果

    do.call(cbind, L)
                 AXP.Close    BA.Close   DIS.Close
    2012-06-20 0.008742843 0.001233468 0.004619916
    

    这相当于cbind(L[[1]], L[[2]], L[[3]]),但适用于任何长度的列表。


    解决您的编辑问题。我认为这对道琼斯 30 指数会如你所愿

    # make a simple function to get the names of the DJIA components
    DJIcomponents <- function() {
        require("XML")
        djicomp <- readHTMLTable('http://finance.yahoo.com/q/cp?s=^DJI+Components', 
                                 stringsAsFactors=FALSE)
        data.frame(djicomp[[tail(grep("Symbol", djicomp), 1)]])
    }
    s <- DJIcomponents()$Symbol
    
    getSymbols(s, src='yahoo', from="2009-06-20", to="2009-06-22")
    out <- do.call(cbind, lapply(s, function(sym) {
        sum(getDividends(sym, from = "2008-06-29", to="2009-06-20"))/Cl(get(sym, pos=.GlobalEnv))
    }))
    

    现在,按降序排列

    out[1, order(out[1, ], decreasing=TRUE)]
                 GE.Close  BAC.Close  PFE.Close   DD.Close    T.Close
    2009-06-22 0.08940972 0.08207705 0.07572684 0.06804979 0.06708075
                MRK.Close   VZ.Close   AA.Close  CAT.Close  CVX.Close
    2009-06-22 0.06036537 0.06029314 0.05389222 0.05191595 0.03953771
                 HD.Close  JPM.Close INTC.Close  MMM.Close   BA.Close
    2009-06-22 0.03870968 0.03620322 0.03571429 0.03514877 0.03496802
                KFT.Close  JNJ.Close   KO.Close  MCD.Close   PG.Close
    2009-06-22 0.03445545 0.03369977 0.03292353 0.03277972 0.03243671
               AXP.Close  TRV.Close  UTX.Close  XOM.Close MSFT.Close
    2009-06-22 0.0309944 0.02922552 0.02805249 0.02353283 0.02147766
                WMT.Close  IBM.Close  DIS.Close   HPQ.Close CSCO.Close
    2009-06-22 0.02103313 0.01961347 0.01544572 0.008479067          0
    

    【讨论】:

    • 令人惊讶的是,您可以通过如此少的信息获得如此接近的信息!我编辑了我的帖子问题,并提供了更多详细信息,如果您可以快速浏览一下,那就太好了!非常感谢您的帮助
    • 即使是上帝也不能做得更好!谢谢你为我做的一百万,真是太棒了!
    【解决方案2】:

    这取决于生成这些答案的代码类型。将它们全部放入向量中的最简单方法是:

    v = c(AXP.Close=AXP.Close, BA.Close=BA.Close...)
    

    然而,基于你的计算之间的相似性,看起来它们都是股票的收盘价,我猜每个计算几乎完全相同。在这种情况下,您当然不应该使用单独的代码生成它们,然后将它们全部放入一个向量中 - 您应该使用 for 循环生成它们 - 或者更好的是,调用 sapply

    你能提供更多关于你的计算的细节吗?

    另外:目前的数据是什么形式的?看起来它们与日期和股票名称相关联。

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      相关资源
      最近更新 更多