下午好,
假设我有以下数据框:
> 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))
第一列是变量的级别,第2列和第3列是该变量的增长率(忽略舍入误差)。现在,您会注意到在7-9期间我只有增长率。什么是退出这些增长率对这个水平意味着什么的最好方法?
例如对于df [7,2],计算将是2.06 * 1.1,对于df [8,2]它将是df [7,2] * 1.2等。我可以轻松地写一个循环,但我想它不是最像&#34; R-like&#34;这样做的方式......
[编辑]让我投入一个复杂的问题。假设,我的数据是四分之一。而不是q / q增长率,第2列和第3列是y / y增长率。因此,使用我之前的例子,df [7,2],计算结果为1.72 * 1.1,对于df [8,2],它将是df [5,2] * 1.2等。
有什么想法吗?
答案 0 :(得分:1)
这应该有效
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$l
的累积积来计算df$g1
。
然后把它们放在一起。