获取向量的差异向量 [英] Getting a vector of differences of a vector

查看:33
本文介绍了获取向量的差异向量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个长度为 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:5k=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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆