11

Rで任意の変数(つまり、通常の時系列ではない)のラグ変数の行列を作成する最も効率的な方法は何ですか?

例えば:

入力:

x <- c(1,2,3,4) 

2ラグ、出力

[1,NA, NA]
[2, 1, NA]
[3, 2,  1]
[4, 3,  2]
4

4 に答える 4

21

組み込みembed()関数を使用してこれを実現できます。ここで、2 番目の「ディメンション」引数は、「lag」と呼ばれるものと同等です。

x <- c(NA,NA,1,2,3,4)
embed(x,3)

## returns
     [,1] [,2] [,3]
[1,]    1   NA   NA
[2,]    2    1   NA
[3,]    3    2    1
[4,]    4    3    2

embed()Joshua Reichによる以前の回答で議論されました。(目的の出力を複製するために、x の先頭に NA を追加したことに注意してください)。

特に名前はよくありませんが、ローリング合計や移動平均など、スライディング ウィンドウを含む操作には非常に便利で強力です。

于 2009-08-21T18:29:57.437 に答える
9

classオブジェクトに適切なを使用してください。ベースRにtsは、lag()操作する関数があります。これらのtsオブジェクトは、'delta' または 'frequency' が一定の時からのものであることに注意してください: マクロ経済シリーズのように、月次または四半期ごとのデータ。

(ビジネス) デイリーなどの不規則なデータの場合は、ラグも (非常にうまく) 処理できるzooまたはxtsパッケージを使用します。そこからさらに先に進むには、dynlmdlmなどのパッケージを使用して、ラグのある動的回帰モデルを許可できます。

時系列、計量経済学、金融のタスク ビューにはすべて、さらなるポインターがあります。

于 2009-08-21T14:13:49.017 に答える
2

パッケージ内のrunning関数は、gtools多かれ少なかれあなたが望むことを行います:

> require("gtools")
> running(1:4, fun=I, width=3, allow.fewer=TRUE)

$`1:1`
[1] 1

$`1:2` 
[1] 1 2

$`1:3` 
[1] 1 2 3

$`2:4` 
[1] 2 3 4
于 2009-08-21T16:24:46.257 に答える
1

私にとって最も効果的な方法は、パッケージのlag関数を使用することです。dplyr

例:

> require(dplyr)
> lag(1:10, 1)
 [1] NA  1  2  3  4  5  6  7  8  9
> lag(1:10, 2)
 [1] NA NA  1  2  3  4  5  6  7  8
于 2015-06-29T18:41:20.013 に答える