【发布时间】:2017-08-21 14:26:04
【问题描述】:
这可能是一个非常基本的问题,但我似乎没有让它正常工作。我需要计算一个元素的简单乘积及其在时间序列数据的 R data.frame 中的一定数量的滞后。我试图在dplyr 管道中实现这一点。例如:
require(dplyr)
df <- data.frame(YEAR = c(2010, 2011, 2012, 2013, 2014),
x = c(1, 2, 3, 4, 5))
dfFinal <- df %>% mutate(prodLag1 = prod(x, lag(x, 1), na.rm = T),
prodLag2 = prod(x, lag(x, 1), lag(x, 2), na.rm = T),
prodLag3 = prod(x, lag(x, 1), lag(x, 2), lag(x, 3), na.rm = T))
结果不是我想的那样。例如。使用 prodLag1 生成的数据框应如下所示:
dfFinal <- data.frame(YEAR = c(2010, 2011, 2012, 2013, 2014),
x = c(1, 2, 3, 4, 5),
prodLag1 = c(NA, 2, 6, 12, 20))
此外,我的目标是 lag = 10,我想找到比仅输入每个 lag 更可行的方法。Reduce 可以解决这个问题吗?
【问题讨论】:
-
df %>% mutate(x*lag(x))? -
prod将向量x的所有元素相乘,所以prodLag1是x和lag(x)全部相乘,即1*2*3*4*5*1 *2*3*4=2880。只需使用*将向量逐个元素相乘。 -
谢谢!当然。我仍然需要考虑如何进行序列化。
-
cumprod可能有用 - 那么prodLagN将是cumprod(x)/lag(cumprod(x),N+1)。如果是大数据框,最好使用cumsum(log(x))和prodLagN = exp(cumsum(log(x))-lag(cumsum(log(x)),N+1))或类似的东西