1

一連の異なる計算の答えをベクトルにグループ化できるかどうか疑問に思っていますか? 30 の計算があり (最初の 3 つの答えをここに表示しました)、ベクトルまたはデータ フレーム内でそれらをすべてグループ化して、株式名が残るようにしたいと考えています。目標は、価格の降順に並べ替えることです

             AXP.Close
2002-06-20 0.008553863

2番目の答えベクターまたはデータフレーム内に挿入したい

             BA.Close
2002-06-20 0.01553576

3番目の回答ベクターまたはデータフレーム内に挿入したい

            DIS.Close
2002-06-20 0.01073620

詳細

お二人ともご回答いただきありがとうございます。そのとおりです。詳細を説明する必要があります。

したがって、基本的に、ダウ・ジョーンズ指数の 30 株の利回りを計算して降順に並べ替えようとしています。2002 年の利回りを選択するオプションがないため、yahooQF("配当利回り") は使用できません。例

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]])が、任意の長さのリストに対して機能します。


あなたの編集に対処するため。これで Dow 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 に答える