2015-10-12 3 views
1

У меня есть data.frame вроде этого:Diff значения по группам в кадре данных

head(MatrixVertice2011,35) 
    values  ind 
5 10.82000 2011-01-03 
6 11.75000 2011-01-03 
7 10.84048 2011-01-04 
8 11.79000 2011-01-04 
9 10.87095 2011-01-05 
10 11.84000 2011-01-05 
11 10.88928 2011-01-06 
12 11.88000 2011-01-06 
13 10.92000 2011-01-07 
14 12.03000 2011-01-07 
19 10.93984 2011-01-10 
20 12.17000 2011-01-10 
... 
33 11.10000 2011-01-17 
34 12.38000 2011-01-17 
35 11.11000 2011-01-18 
36 12.32000 2011-01-18 
37 11.15000 2011-01-19 
38 12.30000 2011-01-19 
39 11.14000 2011-01-20 
40 12.30000 2011-01-20 
41 11.15000 2011-01-21 
42 12.35000 2011-01-21 
47 11.14000 2011-01-24 
48 12.40000 2011-01-24 
49 11.14000 2011-01-26 
50 12.51000 2011-01-26 
51 11.14000 2011-01-27 

мне нужно сделать лаг различия. Мне нужно сделать это в соответствии с датами:

Когда я в 2011-01-03, я бы выделил 6-й - 5-й и, таким образом, перешел к следующей дате и так далее, соблюдая дату.

Не могли бы вы помочь мне реализовать код/​​функцию или подсказку, чтобы это сделать?

Когда я делаю:

MatrixSPREAD<-diff(MatrizVertice2011$values) 

Эта команда не учитывает дату, очевидно.

ответ

1

С data.table:

library(data.table) 

setDT(MatrixVertice2011)[, list(diff=diff(values)), by=ind] 

      ind diff 
1: 2011-01-03 0.93000 
2: 2011-01-04 0.94952 
3: 2011-01-05 0.96905 
... 
12: 2011-01-24 1.26000 
13: 2011-01-26 1.37000 

С dplyr:

library(dplyr) 

MatrixVertice2011 %>% group_by(ind) %>% 
    summarise(diff = diff(values)[1]) 

С базой R:

aggregate(values ~ ind, FUN=diff, data=MatrixVertice2011) 
+0

Спасибо, eipi10 !!! – digsydinner

Смежные вопросы