获取向量的差异向量 [英] Getting a vector of differences of a vector
问题描述
假设我有一个长度为 n
的向量 v
;我希望创建一个该长度的新向量,它将在第一个 k
单元格中包含 NA
,并且在单元格编号 m
中将包含包含差异v[m]-v[mk]
.
Suppose I have a vector v
of length n
; I wish to create a new vector of that length, that will contain NA
in the first k
cells, and that in cell number m
it will contain the difference v[m]-v[m-k]
.
我可以创建一个完成该任务的 for 循环:
I can create a for-loop that accomplishes that task:
diffs <- rep(NA, length(v))
for (i in k+1:length(diffs)) {
diffs[i] <- v[i] - v[i-k]
}
但我听说 R
中的循环很慢,而且这样做看起来有点麻烦.
But I've heard loops in R
are slow, and it looks a bit cumbersome to do it like that.
实际上,我的目标是创建一个 diff 向量列表,而不是一个列表 - 每个 k
在某个范围内.循环是唯一的解决方案吗?
Actually, my goal is to create a list of diff vectors and not a single one - one for each k
in some range. Are loops the only solution?
在输入 v <- 1:5
和 k=2
我期望输出 [1] NA NA 2 2 2代码>(然而,事实证明,我上面的代码片段的输出是
[1] NA NA 2 2 2 NA NA
...)
On the input v <- 1:5
and k=2
I'd expect the output [1] NA NA 2 2 2
(however, as it turns out, the output of my snippet above is [1] NA NA 2 2 2 NA NA
...)
推荐答案
?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
对于其他滞后间隔或差异幅度,相应地更改滞后和差异参数
For other lag interval or magnitude of differences, change lag and differences arguments accordingly
这篇关于获取向量的差异向量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!