使用dplyr按组计算连续行之间的差异?

Tha*_*ess 13 r dplyr

我有一个ID和时间戳的数据帧.我想计算单个id的每个连续时间戳之间的差异.

我的数据框看起来像这样:

id  time
Alpha   1
Alpha   4
Alpha   7
Beta    5
Beta    10
Run Code Online (Sandbox Code Playgroud)

我正在尝试添加如time.difference下列:

id  time    time.difference
Alpha   1   NA
Alpha   4   3
Alpha   7   4
Beta    5   NA
Beta    10  5
Run Code Online (Sandbox Code Playgroud)

使用dplyr有一个干净的方法吗?(或者tidyr或其他比香草R更容易阅​​读的东西?)

ber*_*ant 24

像这样:

dat %>% 
  group_by(id) %>% 
  mutate(time.difference = time - lag(time))
Run Code Online (Sandbox Code Playgroud)

  • 一件事要添加到此答案(经过长时间的等待)。之所以可行,是因为示例中的数据已经按ID和时间进行了排序。如果不进行排序,则“滞后”将无法可靠地工作。一个更强大的解决方案是在group_by和mutate函数之间添加arrange(time)%>%。这样可以确保为“滞后”功能正确分类数据 (2认同)

Vee*_*kar 6

运用 data.table

library(data.table)
library(dplyr)
setDT(dat)[, time.difference := time - lag(time, 1L), by = id]
Run Code Online (Sandbox Code Playgroud)