1

我想知道是否可以将一堆不同的计算答案分组到一个向量中?我有 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]

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

4

2 回答 2

3

首先,我会做一些看起来像你描述的东西:

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
于 2012-06-27T01:37:57.180 回答
0

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

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

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

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

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

于 2012-06-27T01:33:11.223 回答