2015-11-18 1 views
3

У меня есть кадр данных такого родаCompute различия относительно даты начала группой

year <- c(2001, 2001, 2001, 2006, 2006, 2006, 2007, 2007, 2007) 
group <- c("a", "b", "c", "a", "b", "c", "a", "b", "c") 
value <- c(10, 50, 100, 20, 5, 200, 25, 50, 250) 
mydf <- data.frame(year, group, value)  

Я хотел бы, чтобы вычислить различия и пропорциональные изменения в стоимости за 2006 и 2007 годы по сравнению с 2001 годом я понимаю, как первые различия по группам могут быть вычислены с data.table как в

require(data.table) 
mydf <- data.table(mydf) 

mydf[, D.value:=c(NA, diff(value)), by=group] 
mydf[, PD.value:=c(NA, diff(value)/value[-.N]), by=group] 

mydf <- data.frame(mydf) 

Или как различия относительно даты начала можно вычислить во временном ряду, как описано here. Но я не могу понять, как вычислить различия в стоимости относительно базового года. Любая помощь приветствуется.

ответ

3
mydf[, diffs := value - value[year == 2001], by = group] 
mydf[, propdiffs := diffs/value[year == 2001], by = group] 
# year group value diffs propdiffs 
#1: 2001  a 10  0  0.0 
#2: 2001  b 50  0  0.0 
#3: 2001  c 100  0  0.0 
#4: 2006  a 20 10  1.0 
#5: 2006  b  5 -45  -0.9 
#6: 2006  c 200 100  1.0 
#7: 2007  a 25 15  1.5 
#8: 2007  b 50  0  0.0 
#9: 2007  c 250 150  1.5 
+0

спасибо, что работает. Почему это не работает, если я делаю mydf [, diffs: = c (NA, value-value [year == 2001]), by = group]? – simone

+0

Ну, это вычисляет различия между годами и, конечно, работает, как ожидалось. – Roland

+0

извините, только что отредактировал комментарий – simone