2

複数のシリーズを持つ動物園オブジェクトがある場合は、次のようになります (zoo1 と呼びます):

          'SPY'    'XLE'   'XLF'   'XLY'
1/1/2000   .002    .015    .005    .021 
2/1/2000   .051    .007    .070    .011
3/1/2000   .007    .102    .143    .095

上記の行ごとの最大値を表す別の (zoo2) (ただし、列 'SPY' は除外されます):

1/1/2000    'XLY'
2/1/2000    'XLF'
3/1/2000    'XLF'

Zoo1 からの 'SPY' 値と、zoo1 からの値のペアである Zoo オブジェクトを取得するにはどうすればよいですか。タスクの一般的な説明は、SPY の月間数値と、前月に最高のパフォーマンスを示したシンボルの同じ月の数値をペアにしたいということです。視覚的な例:

           'SPY'   Current_Perf_Of_Prior_Month_Best_Performer
2/1/2000   .051    .011
3/1/2000   .007    .143

私はインデックス作成を試み、結合に関する多くの記事を読み、カスタム関数とともにパッケージ sqldf をダウンロードして使用しようとしました。パントする時間。比較的簡単なはずです。テイカーはいますか?

4

1 に答える 1

2

あなたの質問は同じ結果を達成するための回り道であるため、これはあなたの質問に直接答えません。zoo2オブジェクトは必要ありません。

# reproducible data
Lines <- 
"'Date'     'SPY'    'XLE'   'XLF'   'XLY'
1/1/2000   .002    .015    .005    .021 
2/1/2000   .051    .007    .070    .011
3/1/2000   .007    .102    .143    .095"
zoo1 <- read.zoo(text=Lines, header=TRUE, format="%m/%d/%Y")

# Get return at (t) for best performer at (t-1)
x <- rollapplyr(zoo1, 2, function(x) x[2,which.max(x[1,])], by.column=FALSE)
# merge with original data
merge(zoo1, x)
#              SPY   XLE   XLF   XLY curBestLag
# 2000-01-01 0.002 0.015 0.005 0.021         NA
# 2000-02-01 0.051 0.007 0.070 0.011      0.011
# 2000-03-01 0.007 0.102 0.143 0.095      0.143
于 2013-07-24T16:59:31.393 に答える