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()這兩個向量,但我想知道是否已經有一個可以做同樣的功能。
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()這兩個向量,但我想知道是否已經有一個可以做同樣的功能。
我不知道要執行此操作的基本功能,但由於gsk3指出taRifx軟件包具有此功能。我建議不要調用包做一下這個簡單:你可以這樣做:
v1[-1] - v2[-length(v2)]
或者
shift.diff <- function(x, y) x[-1] - y[-length(y)]
shift.diff(v1, v2)
查看taRifx
包中的shift
命令。
library(taRifx)
shift(v1)-v2
你必須決定你想要做的最後一項(循環v1或只是使它NA)是什麼。 shift
有所有這些可能性的選項,以及將延遲更改爲除1之外的其他值。
如果您使用的是XTS /動物園寫存儲自己的功能.Rprofile時間序列對象,只減去滯後系列:
以矩陣形式x <- .xts(cbind(v1,v2), 1:length(v1))
x$v1-lag(x$v2)
的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
我正在使用一個xts對象,所以這正是我正在尋找的。我將不得不在一些時候寫一個xts常見問題... :) – 2012-03-30 15:51:15
@RobertKubrick:我想,因爲你是[xts]標籤的首要提問者。如果您認真編寫常見問題解答,我會很樂意提供幫助。 – 2012-03-30 15:55:18
我會盡快準備一份草稿。我如何向您發送個人信息或電子郵件?我在這個網站上沒有看到任何直接的聯繫信息。 – 2012-03-30 16:23:14