diff()计算指定滞后的向量中值之间的差异。 是否存在适用于两个向量的等效函数?例如,我有:
v1 = c(1, 2, 3, 4, 5, 3)
v2 = c(5, 4, 3, 2, 1, 0)
我需要计算滞后1处v1和v2的每个值之间的差异。那将是:
(2 - 5), (3 - 4), (4 - 3)...
这可以通过在2个向量上使用head()/ tails()的组合来实现,但我想知道是否已经存在可以执行相同操作的函数。
答案 0 :(得分:9)
我知道没有基本功能,但gsk3指出taRifx包具有此功能。我建议不要打电话给一个包来做一些简单的事情:你可以这样做:
v1[-1] - v2[-length(v2)]
或者在.Rprofile中编写自己的存储功能
shift.diff <- function(x, y) x[-1] - y[-length(y)]
shift.diff(v1, v2)
答案 1 :(得分:4)
查看shift
包中的taRifx
命令。
library(taRifx)
shift(v1)-v2
您必须决定要对最后一个条目执行什么操作(循环v1或只是将其设为NA)。 shift
可以选择所有这些可能性,以及将滞后更改为1以外的其他内容。
答案 2 :(得分:2)
如果你正在使用xts / zoo时间序列对象,只需减去滞后系列:
x <- .xts(cbind(v1,v2), 1:length(v1))
x$v1-lag(x$v2)
答案 3 :(得分: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