【问题标题】:lagged difference with 2 vectors具有 2 个向量的滞后差
【发布时间】:2017-08-20 16:00:11
【问题描述】:

我需要一个函数来计算 2 个变量之间的差异,以及其中一个变量在 1 个滞后周期内的变化。公式如下所示:

有什么简单的方法可以在不使用更复杂的循环的情况下实现这一点?我使用diff 函数对一个向量进行定期百分比更改,如下所示:

pcchange = function(x){ c( NA, diff(x)/x[-length(x)] ) }

有没有什么简单的方法可以编辑这个函数或者例子?

【问题讨论】:

  • 为什么不直接写出来:c(NA, (tail(x, -1) - tail(y, -1)) / head(y, -1)) 或者c((tail(x, -1) - tail(y, -1)) / head(y, -1), NA)

标签: r


【解决方案1】:

一种简单的矢量化方法是使用dplyr。您可以使用leadlag 函数。

vec1 <- seq(1,10)
vec2 <- seq(5,24,2)

library(dplyr)

df1 <- data.frame(vec1, vec2, lag_diff=((lead(vec1)-lead(vec2))/vec2))

df1
   vec1 vec2   lag_diff
1     1    5 -1.0000000
2     2    7 -0.8571429
3     3    9 -0.7777778
4     4   11 -0.7272727
5     5   13 -0.6923077
6     6   15 -0.6666667
7     7   17 -0.6470588
8     8   19 -0.6315789
9     9   21 -0.6190476
10   10   23         NA

【讨论】:

  • 谢谢,这很好用!但是我有一个简单的问题:我如何让 NA 开始?所以 NA 会在-1.0000000 和最后一行的差异的地方出现吗?无法弄清楚如何操纵它。
  • @Alexandros 当然,如果你想这样做,那么你只需在分母上使用滞后函数,而在当前有前导函数的地方不使用任何函数。这就是我虽然你的意思,但我在等式中使用 t 和 t+1 表示法。因此,将 NA 放在开头意味着您将使用 t-1 和 t 而不是 t 和 t+1。
猜你喜欢
  • 2014-06-11
  • 2018-12-30
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多