0

我知道标题中的措辞很尴尬。但是这里有免费的片段:

假设我有一个向量x。假设我想获得x[i] - x[i-1]沿向量运行的值列表,即变化率。如果您参考该示例,我希望将 等的值24.30518 - 24.43082保存在新向量中。在 R 中循环是最有效的方法吗?

   hour   value
1    00 24.43082
2    01 24.30518
3    02 24.18798
4    03 24.07979
5    04 23.99070
6    05 23.91297
7    06 23.84412
8    07 23.83976
9    08 24.37504
10   09 25.24583
11   10 26.22111
12   11 27.14665
13   12 27.85554
14   13 28.34957
15   14 28.53274
16   15 28.39928
17   16 28.03880
18   17 27.51899
19   18 26.91361
20   19 26.16487
21   20 25.52663
22   21 25.10923
23   22 24.79797
24   23 24.58154

有可能做到这一点lapply吗?或者任何其他方式,例如使用延迟?或者任何其他简约的方式?

额外问题: 我处理的数据是一个循环温度序列,意思是说向量的最后一个元素将跟随向量的第一个元素。在这种情况下,是否可以扩展上述任何方法以获得完整的值集(而不是输出的第一个元素的空值)

4

3 回答 3

3

'diff' 给出了滞后的差异,滞后默认为 1(这里需要)。

要获取附加元素,请直接计算它并将其添加到 diff 的结果之前:

first <- x$value[1] - x$value[length(x$value)
result <- c(first, diff(x$value))
于 2012-05-28T15:46:24.720 回答
2

避免 R 中的循环 - 它们很慢。为您的特定任务使用diff

于 2012-05-28T15:42:17.440 回答
1

对你的问题更一般的答案是在你的向量和你的向量的移动副本之间进行数学运算。diff() 函数只是差异的特例,但您可以在两个移位向量上使用任何向量化函数。例如,假设您想要 x 的乘积和 x 中的下一项。

n <- length(x)
x[1:(n-1)] * x[2:n]

(您可能希望填充它以匹配原始向量的长度,在这种情况下可能在最后,因为最后一项不能乘以下一项。)

{在一般情况下直接回答您的问题,这是一个差异方程

x[2:n] - x[1:(n-1)]

}

于 2012-05-28T18:06:09.297 回答