4.1 時系列オブジェクトの生成と処理
4.1.10 時系列を部分的に集約する aggregate()
データを部分集合に分割し,各々に対する要約統計量を計算し,結果を適切な形式で 返す.
書式:
aggregate(x, ...)
aggregate(x, by, FUN, ...) #
クラス"data.frame"
用メソッド#
クラス"ts"
用メソッドaggregate(x, nfrequency = 1, FUN = sum, ndeltat = 1, ts.eps = getOption("ts.eps"), ...)
引数:
x R
オブジェクトby
グループ化要素のリストで,各々はx
中の変数と同じ長さを持つ.FUN
要約統計量を計算する,全てのデータサブセットに適用可能なスカラ値関数nfrequency
時間単位毎の新しい観測値数.x
の周波数の約数でなければならないndeltat
引き続く観測値間のサンプリング間隔の新しい比率.x
のサンプリング間隔の約数でなければならない
ts.eps nfrequency
が元の周波数の約数かどうかを判定する許容度...
メソッドに引き渡される(
使われる)
追加引き数aggregate()
はデータフレームと時系列に対するメソッドを持つ総称的関数である.既定のメソッド
aggregate.default()
は,もしx
が時系列なら時系列用メソッドを使 い,さもなければ,x
をデータフレームに強制変換してからデータフレーム用メソッドを 呼び出す.aggregate.data.frame()
はデータフレーム用のメソッドである.もしx
がデータ フレームでなければ,データフレームに強制変換される.それから,x
中の変数(
列)
の 各々がby
の成分の同一の組合せを持つケース(
行)
のサブセットに分割される.そして,FUN
が...
中の追加引き数を用いて,各サブセットに適用される.(
つまり,x
中の各変 数VAR
に対して,実際はlapply()
の一回の呼び出しに置き換えられた,tapply(VAR, by, FUN, ..., simplify = FALSE)
が実行される.)
空のサブセットは除去され,結 果はby
とx
中の変数を含むデータフレームに再整形される.by
に由来する変数はサブ セットを決定するのに使われたグルーピング変数の一意的な組合せを含み,x
に由来する 変数は,対応するx
中のサブセットに対する要約統計量を含む.aggregate.ts()
は時系列用のメソッドである.もしx
が時系列でなければ,時系列に強制変換される.それから,
x
中の変数が長さfrequency(x)/nfrequency
の適当な ブロックに分割され,...
中の(
名前付き)
引き数を備えた関数FUN
が各ブロックに適用 される.返される結果は集約された値を含む周波数nfrequency
の時系列である.# 米国50州の各種データstate.x77中の変数を,4地域毎にグループ化し平均を取る
> aggregate(state.x77, list(Region = state.region), mean)
Region Population Income Illiteracy Life Exp Murder HS Grad
1 Northeast 5495.111 4570.222 1.000000 71.26444 4.722222 53.96667 2 South 4208.125 4011.938 1.737500 69.70625 10.581250 44.34375 3 North Central 4803.000 4611.083 0.700000 71.76667 5.275000 54.51667 4 West 2915.308 4702.615 1.023077 71.23462 7.215385 62.00000
Frost Area
1 132.7778 18141.00 2 64.6250 54605.12 3 138.8333 62652.00 4 102.1538 134463.00
# 地域と霜が130日以上降りたかどうかで平均を取る(Southにはそうした州が無い)
> aggregate(state.x77, list(Region = state.region, Cold = state.x77[,"Frost"] > 130), mean)
Region Cold Population Income Illiteracy Life Exp Murder 1 Northeast FALSE 8802.8000 4780.400 1.1800000 71.12800 5.580000 2 South FALSE 4208.1250 4011.938 1.7375000 69.70625 10.581250 3 North Central FALSE 7233.8333 4633.333 0.7833333 70.95667 8.283333 4 West FALSE 4582.5714 4550.143 1.2571429 71.70000 6.828571 5 Northeast TRUE 1360.5000 4307.500 0.7750000 71.43500 3.650000 6 North Central TRUE 2372.1667 4588.833 0.6166667 72.57667 2.266667 7 West TRUE 970.1667 4880.500 0.7500000 70.69167 7.666667
HS Grad Frost Area
1 52.06000 110.6000 21838.60 2 44.34375 64.6250 54605.12 3 53.36667 120.0000 56736.50 4 60.11429 51.0000 91863.71 5 56.35000 160.5000 13519.00 6 55.66667 157.6667 68567.50 7 64.20000 161.8333 184162.17
# 米国大統領支持率データpresidentsの年毎の支持率を求める
> aggregate(presidents, nf = 1, FUN = mean)
Time Series: Start = 1945 End = 1974 Frequency = 1
[1] NA 47.00 51.00 NA 58.50 41.75 28.75 NA 67.00 65.00 72.75 72.25 [13] 65.25 52.25 61.50 62.75 76.00 71.50 64.75 72.75 66.50 52.25 45.00 41.00 [25] 61.25 58.00 50.50 NA 44.75 25.25
# 夏期により少ない重みを与え平均
> aggregate(presidents, nf = 1, FUN = weighted.mean, w = c(1, 1, 0.5, 1)) Time Series: Start = 1945 End = 1974 Frequency = 1
[1] NA 47.57143 50.57143 NA 58.71429 41.14286 28.28571 NA [9] 65.85714 64.14286 71.85714 73.00000 65.57143 52.85714 61.57143 63.00000 [17] 76.71429 72.85714 65.14286 73.28571 66.14286 51.71429 46.00000 41.85714 [25] 60.71429 57.57143 50.00000 NA 45.42857 25.42857
4.1.11 欠損値を含まない最長の部分時系列を取り出す na.contiguous()
メソッド
na.omit() (
実際は関数na.omot.ts())
は時系列の先頭と末尾にある(
引 き続く)
欠損値を取り去る.内部に含まれる欠損値はエラーとなる.返り値は欠損値 の無い時系列となる.object
のクラスは保存される.na.omit(), na.fail()
そしてna.contiguous()
を参照せよ.na.contiguous()
は引き続いて欠損値を含まないような,最長の部分時系列を取り出す.もしそうしたものが複数あれば,最初のものを返す.引き数
frame
は一次元,もし くは多次元時系列である.frame
のクラスは保存される.書式:
#
クラス"ts"
に対するS3
メソッドna.omit(object, ...)
na.contiguous(object, ...)
引数:
object
一変量,もしくは多変量時系列...
他のメソッドに(
から)
引き渡される追加引き数> (x <- ts(c(NA,NA,1:10,NA), start=c(2008,1), frequency=12)) # 先頭と末尾にNAを含む時系列 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 NA NA 1 2 3 4 5 6 7 8 9 10
2009 NA
> na.omit(x) # 先頭と末尾のNAが全て除かれる
Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 1 2 3 4 5 6 7 8 9 10
> (x <- ts(c(NA,NA,1:5,NA,6:10,NA), start=c(2008,1), frequency=12)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 NA NA 1 2 3 4 5 NA 6 7 8 9
2009 10 NA # 途中にNAがあるとエラー
> na.omit(x) 以下にエラー na.omit.ts(x) : 時系列は内部に NA 値を含んでいます
> (x <- ts(cbind(c(NA,NA,1:10,NA),c(1:11,NA,NA)), start=c(2008,1),
frequency=12)) # 多変量時系列の場合
Series 1 Series 2
Jan 2008 NA 1
Feb 2008 NA 2
Mar 2008 1 3
Apr 2008 2 4
May 2008 3 5
Jun 2008 4 6
Jul 2008 5 7
Aug 2008 6 8
Sep 2008 7 9
Oct 2008 8 10
Nov 2008 9 11
Dec 2008 10 NA
Jan 2009 NA NA
> na.omit(x)
Series 1 Series 2
Mar 2008 1 3
Apr 2008 2 4
May 2008 3 5
Jun 2008 4 6
Jul 2008 5 7
Aug 2008 6 8
Sep 2008 7 9
Oct 2008 8 10
Nov 2008 9 11
> (x <- ts(c(NA,NA,1:5,NA,6:11,NA), start=c(2008,1), frequency=12)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 NA NA 1 2 3 4 5 NA 6 7 8 9
2009 10 11 NA
> na.contiguous(x) # NA値を含まない最長の副時系列を取り出す
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 6 7 8 9
2009 10 11
> (x <- ts(cbind(c(NA,NA,1:5,NA,6:9,NA),c(1:11,NA,NA)), start=c(2008,1),
frequency=12)) # 多変量時系列の場合
Series 1 Series 2
Jan 2008 NA 1
Feb 2008 NA 2
Mar 2008 1 3
Apr 2008 2 4
May 2008 3 5
Jun 2008 4 6
Jul 2008 5 7
Aug 2008 NA 8
Sep 2008 6 9
Oct 2008 7 10
Nov 2008 8 11
Dec 2008 9 NA
Jan 2009 NA NA
> na.contiguous(x)
Series 1 Series 2
Mar 2008 1 3
Apr 2008 2 4
May 2008 3 5
Jun 2008 4 6
Jul 2008 5 7