为每个组添加一列时差

时间:2017-07-11 04:50:23

标签: r datetime

我有一个数据框。

DeviceID       AreaID       Time
325            10152        04:40:36
325            10221        04:45:36
325            10152        12:45:12
525            10152        09:58:32
525            10221        10:03:39
...................................

我想根据以下条件添加一列时差: 如果AreaID 10152和10221的时间在1小时内,我需要每个DeviceID的时差。否则它将是NA。

结果应该是这样的:

DeviceID       AreaID       Time            TimeDifference
325            10152        04:40:36        00:05:00
525            10152        09:58:32        00:05:07
................................

1 个答案:

答案 0 :(得分:2)

这个怎么样:

# Load data sample
dat = read.table(text="DeviceID       AreaID       Time
325            10152        04:40:36
                 325            10221        04:45:36
                 325            10152        12:45:12
                 525            10152        09:58:32
                 525            10221        10:03:39", header=TRUE, stringsAsFactors=FALSE)

library(hms)
library(tidyverse)

dat$Time = as.hms(dat$Time)

dat %>% 
  group_by(DeviceID) %>% 
  mutate(TimeDifference = as.hms(lead(Time) - Time)) %>% 
  filter(TimeDifference <= 60*60)
  DeviceID AreaID     Time TimeDifference
     <int>  <int>   <time>         <time>
1      325  10152 04:40:36       00:05:00
2      525  10152 09:58:32       00:05:07