2012-02-08 14 views
4

私はあなたのほとんどの人にとって些細かもしれない質問があります。私はたくさん試しました、解決策には来なかったので、誰かが私にヒントを与えることができたらうれしいです。出発点は毎週xts時系列です。R:期間(月)の左側移動平均

 
Month Week Value Goal 
Dec 2011 W50 a  a 
Dec 2011 W51 b  mean(a,b) 
Dec 2011 W52 c  mean(a,b,c) 
Dec 2011 W53 d  mean(a,b,c,d) 
Jan 2012 W01 e  e 
Jan 2012 W02 f  mean(e,f) 
Jan 2012 W03 g  mean(e,f,g) 
Jan 2012 W04 h  mean(e,f,g,h) 
Feb 2012 W05 i  i 
Feb 2012 W06 j  mean(i,j) 

Excelの表記を言い訳が、私はそれは私が何をしたいのか、それはかなり明らかに考えてください:私は左を計算するよう、コラム「価値」のためのちょうどそれぞれの月の移動平均を両面Goal列に表示されます。私はapply.monthly()period.apply()と実験しました。しかし、それは私が欲しいものを私に与えてくれませんでした。あなたの誰かが私にこの問題を解決するためのヒントを与えることができますか?私が使うはずの機能のヒントはすでに十分でしょう!

ありがとうございました!

敬具、私は私はあなたの質問は右だ願ってい

アンドレアス

+0

これは、「拡張ウィンドウ」平均と呼ばれることがよくあります。 –

+0

ありがとうございます - しばしば私は何をしたいのか正確に知っていますが、正しい検索語句がありません。これはそのケースの1つでした;-) – chameau13

答えて

2

apply.monthlyは、の1つの値を期間のエンドポイントに割り当てますが、各月の期間に多くの値を割り当てたいからです。

これは、xtsデータを月ごとに分割し、それぞれに累積平均関数を適用し、リストをまとめてrbindingすることで、非常に簡単に行うことができます。

library(quantmod) 
# Sample data 
getSymbols("SPY") 
spy <- to.weekly(SPY) 
# Cumulative mean function 
cummean <- function(x) cumsum(x)/seq_along(x) 
# Expanding average calculation 
spy$EA <- do.call(rbind, lapply(split(Cl(spy),'months'), cummean)) 
+0

ありがとうございます!あなたのソリューションは、私が望むのと全く同じように動作しています!あなたのためにお返事ありがとうございます! – chameau13

+2

と置き換えるか、最後の行を次のように置き換えてください: 'spy $ EA < - ave(Cl(spy)、as.yearmon(time(spy))、FUN = cummean)' –

2

require(plyr) 
require(PerformanceAnalytics) 
ddply(data, .(Week), summarize, Goal=apply.fromstart(Value,fun="mean")) 

これは動作するはずです - reproducible expampleが素敵だったでしょうけれども:それはあなたが探しているものということです。

ここがそうです。

df <- data.frame(Week=rep(1:5, each=5), Value=c(1:25)*runif(25)) #sample data 

require(plyr) 
require(PerformanceAnalytics) 

df$Goal <- ddply(df, .(Week), summarize, Goal=apply.fromstart(Value,FUN="mean"))[,2] 

結果:?ddplyまたは?apply.fromstart:もちろん

Week  Value  Goal 
1  1 0.7528037 0.7528037 
2  1 1.9622622 1.3575330 
3  1 0.3367802 1.0172820 
4  1 2.5177284 1.3923936 

あなたは助けを経由して、さらに情報を得ることができます。

+0

ありがとう、私はまた解決策を試して、それもする必要があります。ジョシュアのことは私にはもっと透明に思えました。しかし、私は小さな誤解があったと思う:ddply(df、。(週間)、...)。私はrownamesによって作成された月を持つインデックスベクトルを使用しなければなりませんでした。 – chameau13