我知道标题中的措辞很尴尬。但是这里有免费的碎片:
假设我有一个向量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
执行此操作?或者使用滞后等其他方式?还是其他任何简约的方式?
奖金问题: 我处理的数据是一个循环温度序列,这意味着矢量的最后一个元素将跟随矢量的第一个元素。在这种情况下,是否可以扩展上述任何方法以获得一组完整的值(而不是输出的第一个元素的空值)
答案 0 :(得分:3)
'diff'给出滞后差异,滞后默认为1(根据需要)。
要获取附加元素,请直接计算并预先添加diff:
的结果first <- x$value[1] - x$value[length(x$value)
result <- c(first, diff(x$value))
答案 1 :(得分:2)
避免R中的循环 - 它们很慢。对于您的特定任务,请使用diff
。
答案 2 :(得分:1)
您的问题的更一般的答案是在矢量和矢量的移位副本之间进行数学运算。 diff()函数是差异的一种特殊情况,但您可以在两个移位向量上使用任何向量化函数。例如,假设您想要x的产品和x中的下一个项目。
n <- length(x)
x[1:(n-1)] * x[2:n]
(你可能想要填充它以匹配原始向量的长度,在这种情况下可能最后,因为最后一项不能乘以下一项。)
{在一般情况下直接回答你的问题,这是一个差异方程式
x[2:n] - x[1:(n-1)]
}