2012-03-30 59 views
7

diff()計算指定延遲處向量中值之間的差異。 有兩個向量工作的等價函數嗎?例如,我有:用於多列的diff()替換

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

我需要計算的V1每個值和v2在滯後1之間的差這將是:

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

這可以通過使用(頭的組合來實現)/ tails()這兩個向量,但我想知道是否已經有一個可以做同樣的功能。

回答

9

我不知道要執行此操作的基本功能,但由於gsk3指出taRifx軟件包具有此功能。我建議不要調用包做一下這個簡單:你可以這樣做:

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

或者

shift.diff <- function(x, y) x[-1] - y[-length(y)] 
shift.diff(v1, v2) 
4

查看taRifx包中的shift命令。

library(taRifx) 
shift(v1)-v2 

你必須決定你想要做的最後一項(循環v1或只是使它NA)是什麼。 shift有所有這些可能性的選項,以及將延遲更改爲除1之外的其他值。

2

如果您使用的是XTS /動物園寫存儲自己的功能.Rprofile時間序列對象,只減去滯後系列:

以矩陣形式
x <- .xts(cbind(v1,v2), 1:length(v1)) 
x$v1-lag(x$v2) 
+0

我正在使用一個xts對象,所以這正是我正在尋找的。我將不得不在一些時候寫一個xts常見問題... :) – 2012-03-30 15:51:15

+1

@RobertKubrick:我想,因爲你是[xts]標籤的首要提問者。如果您認真編寫常見問題解答,我會很樂意提供幫助。 – 2012-03-30 15:55:18

+0

我會盡快準備一份草稿。我如何向您發送個人信息或電子郵件?我在這個網站上沒有看到任何直接的聯繫信息。 – 2012-03-30 16:23:14

2

embed功能將創建偏移向量。如果選擇第一列,則它是未移位的但是縮短了一個接一個的矢量,而第二列是移位並縮短的開始矢量。

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