滞后差异

时间:2016-03-03 15:26:59

标签: r plyr

示例数据:

Date <- as.Date(c('1-01-2008','2-01-2008', '3-01-2008','4-01-2008', '5-01-2008', '1-01-2008','2-01-2008', '3-01-2008','4-01-2008', '5-01-2008'), format = "%m-%d-%Y") 
Country <- c('US', 'US','US','US', 'US', 'JP', 'JP', 'JP', 'JP', 'JP') 
Category <- c('Apple', 'Apple', 'Apple', 'Apple', 'Apple', 'Apple', 'Apple', 'Apple', 'Apple', 'Apple') 
Value <- c(runif(10, -0.5, 10))
df <- data.frame(Date, Country, Category, Value)

我使用以下部分来计算国家内和类别内的价值滞后增长率:

df <- ddply(df, .(Country, Category), transform,
                 Growth6m=c(NA, NA, NA, exp(diff(log(Value), lag = 3))-1))

现在我试图让差异而不是增长率。这适用于第一个滞后(即从前一行减去值),如下所示:

 df <- ddply(df, .(Country, Category), transform,
          Growth1m=c(NA, diff(Value))) 

但是当我引入更高阶滞后(例如从第三行减去第一行)时,我得到的错误如下:“参数意味着行数不同:157,158”。我试过玩NA,但无济于事。

编辑:示例数据

1 个答案:

答案 0 :(得分:1)

使用dplyr

很容易
library(dplyr)
df %>%
  group_by(Country, Category) %>%
  mutate(
    deltaLag1 = Value - lag(Value, 1),
    deltaLag2 = Value - lag(Value, 2)
  )