2016-03-03 101 views
1

的样本数据:滞后差异

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,但无济于事。

编辑:样本数据

+0

请分享例如数据 – mtoto

回答

1

这很容易与dplyr

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

就是这样,谢谢! – Dreica