2012-03-30 2 views
7

diff()は、指定されたラグにあるベクトルの値の差を計算します。 2つのベクトルで機能する同等の関数はありますか?例えば、私は:複数の列のdiff()の置換

v1 = c(1, 2, 3, 4, 5, 3) 
v2 = c(5, 4, 3, 2, 1, 0) 

Iは次のようになり、ラグ1でV1とV2の各値との差を計算する必要があります

(2 - 5), (3 - 4), (4 - 3)... 

これはヘッドの組み合わせを用いて達成することができます( )/ tails()2つのベクトル、しかし私はすでに同じことをすることができる関数があるのだろうかと思っていた。

答えて

9

これは私が知っているベース機能はありませんが、gsk3はtaRifxパッケージにこの機能があります。私はこの単純な何かをするパッケージを呼び出すことに対して助言する:あなたが行うことができます:

v1[-1] - v2[-length(v2)] 

それとも.Rprofile

に保存するため、独自の関数を記述
shift.diff <- function(x, y) x[-1] - y[-length(y)] 
shift.diff(v1, v2) 
4

パッケージのshiftコマンドを見てください。

library(taRifx) 
shift(v1)-v2 

あなたが最後のエントリで行う(サイクルv1またはそれNA作る)したいのかを決定する必要があります。 shiftには、これらの可能性のすべてのオプションと、ラグを1以外のものに変更するオプションがあります。

2

あなたはXTS /動物園を使用している場合時系列オブジェクトだけ遅れシリーズを引く:

x <- .xts(cbind(v1,v2), 1:length(v1)) 
x$v1-lag(x$v2) 
+0

私はxtsオブジェクトを使用していますので、これは私が探していたものです。私はある時点でxts FAQを書く必要があります:) –

+1

@RobertKubrick:[xts]タグのトップ質問者なので、私は考えました。あなたがFAQを書くことを真剣にしているのであれば、私は喜んで助けてくれるでしょう。 –

+0

私は余裕を持ってすぐに草案を作成します。私はどのようにあなたに個人的なメッセージまたは電子メールを送ることができますか?私はこのウェブサイトに直接の連絡先情報は表示されません。 –

2

embed機能は、マトリクス状にベクトルをシフト作成します。最初の列を選択すると、それはシフトされずに短縮された1列のベクトルになり、2列目はシフトされ、1行1列分短縮されたベクトルになります。

embed(v1,2)[,1] -embed(v2,2)[,2] 
#[1] -3 -1 1 3 2 

embed(v1, 2) 
    [,1] [,2] 
[1,] 2 1 
[2,] 3 2 
[3,] 4 3 
[4,] 5 4 
[5,] 3 5 
関連する問題