假设我有一个长度为v
的向量n
;我希望创建一个长度为新的向量,在第一个NA
单元格中包含k
,在单元格编号m
中包含差异v[m]-v[m-k]
。
我可以创建一个完成该任务的for循环:
diffs <- rep(NA, length(v))
for (i in k+1:length(diffs)) {
diffs[i] <- v[i] - v[i-k]
}
但是我听说R
中的循环很慢,而且看起来有点麻烦。
实际上,我的目标是创建一个diff矢量列表而不是一个 - 在某个范围内每个k
一个。循环是唯一的解决方案吗?
在输入v <- 1:5
和k=2
上我希望输出[1] NA NA 2 2 2
(但是,事实证明,上面我的代码段的输出是[1] NA NA 2 2 2 NA NA
.. 。)
答案 0 :(得分:3)
?DIFF
vec <- data.frame(v=c(1,3,5,15,21))
vec$dif <- c(NA, diff(vec$v, lag = 1, differences = 1))
> vec
v dif
1 1 NA
2 3 2
3 5 2
4 15 10
5 21 6
对于其他滞后间隔或差异幅度,相应地更改滞后和差异参数