2017-04-19 11 views
1

私は月ごとに日付ごとにフィルタリングしたい大きいxtsを持っています。xtsサブセットを素早く作成する

今I'mdは時間がかかり、毎日と月の値のためのループを介してそれをやって
library(xts) 
junk <- xts(sample.int(101, size = 1461, replace = T), seq(as.Date('2006-01-01'), as.Date('2009-12-31'), 'days')) 
junk_sma10 = TTR::SMA(x = junk, n = 10) ## trailing 10 day avg 

。私は、Rが一度にベクトルを行うことがより良いことを知っています。

months_filtered <- idx_apcp30[.indexmon(junk_sma10) == 1]  ## filter for feb 
final_filtered <- months_filtered[.indexmday(months_filtered) == 15] ## filter for 16th 

出力は、毎年の毎日のユニークなxtsです。

  SMA 
2006-02-16 61.0 
2007-02-16 50.5 
2008-02-16 60.5 
2009-02-16 54.1 

してから次の反復(1 MDAYは)私が生産し、すべてのは、このプロセスが生成するXTS格納する必要が

  SMA 
2006-02-17 64.3 
2007-02-17 48.4 
2008-02-17 66.1 
2009-02-17 48.6 

を生成します。これをループではどうしたらいいですか?

は、私はこのような解決策が見つかりました:

junk[seq(as.Date('2006-01-01'),as.Date('2009-12-31'),by='year')] 

をしかし、私はまだあなたのXTSは、月と日で固まりにオブジェクトsplit

答えて

1

簡単な解決策がある...毎日反復処理する必要があります。今

# if using xts < 0.10-0 (bug work-around) 
month_day <- split(junk_sma10, as.numeric(format(index(junk_sma10), "%m%d"))) 

# requires xts >= 0.10-0 
month_day <- split(junk_sma10, format(index(junk_sma10), "%m%d")) 

month_dayは、すべての要素が各年の月の同じ月と日である場合には、リストです。次に、lapplyを使って各リスト要素の関数を呼び出すことで分析を続けることができます。

関連する問題