R:在给定增长率矩阵的情况下,收回变量的水平

  • 本文关键字:情况下 水平 变量 增长率
  • 更新时间 :
  • 英文 :


下午好,

假设我有以下数据帧:

> df <- data.frame(l=c(1,1.2, 1.56, 1.72, 2.06, 2.68, NA,NA,NA), g1=c(1.1,1.2,1.3,1.1,1.2,1.3,1.1,1.2,1.3),  g2=c(1.1,1.2,1.3,1.1,1.2,1.3,1.1,1.2,1.3))

第一列是变量的级别,第二列和第三列是该变量的增长率(忽略舍入误差)。现在,你会注意到,在7-9期间,我只有增长率。什么是最好的方法来排除这些增长率对水平的影响?

E。G对于df[7,2]计算为2.06*1.1,对于df[8,2]计算为df[7,2]*1.2等等。我可以很容易地写一个循环,但我想这不是最"像r"的方式…

[EDIT]让我加入一个复杂的问题。假设我的数据是以季度为单位的。第2列和第3列不是q/q增长率,而是y/y增长率。所以,使用我之前的例子,df[7,2],计算将是1.72*1.1,对于df[8,2],它将是df[5,2]*1.2等等。

任何想法?

应该可以了

df$newl <- c(df$l[1] , df$l[1]  * cumprod(df$g1[-1]))


几个细节

 head(df)
#      l  g1
# 1 1.00 1.1
# 2 1.20 1.2
# 3 1.56 1.3
# 4 1.72 1.1
# 5 2.06 1.2
# 6 2.68 1.3

注意df$l可以用

计算
df$l[-nrow(df)] * df$g1[-1]

,但这不能归咎于缺失。

还要注意计算df$l

# the second value is 
1.00 * 1.2
# the third value is  
1.20 * 1.3 == 1.00 * 1.2 * 1.3
# the fourth value is 
1.56 * 1.1 == 1.00 * 1.2 * 1.3 * 1.1

等等

可以用df$g1的累积积来计算df$l。然后把它们放在一起。

最新更新