2015-07-11 16 views
8

Kimlikler ve zaman damgaları için bir veri çerçevem ​​var. Bireysel bir kimlik için her bir sıralı zaman damgası arasındaki farkı hesaplamak istiyorum.Dplyr kullanarak grup tarafından ardışık satırlar arasındaki fark hesaplanıyor mu?

Benim dataframe şöyle görünür:

id time 
Alpha 1 
Alpha 4 
Alpha 7 
Beta 5 
Beta 10 

aşağıda time.difference gibi bir sütun eklemek çalışıyorum:

id time time.difference 
Alpha 1 NA 
Alpha 4 3 
Alpha 7 4 
Beta 5 NA 
Beta 10 5 

dplyr kullanarak bunu yapmak için temiz bir yolu var mı? (Veya tidyr veya başka bir şey vanilya Ar daha kolay okunur olduğunu?) Bunun gibi

cevap

16

:

dat %>% 
    group_by(id) %>% 
    mutate(time.difference = time - lag(time)) 
5

data.table

library(data.table) 
library(dplyr) 
setDT(dat)[, time.difference := time - lag(time, 1L), by = id] 
kullanarak