基于条件和两个时间列的R中的时差

时间:2019-06-01 19:28:07

标签: r dplyr data-analysis data-manipulation

对于按ID进行的每个数据分组,我想获取数据框中事件之间的时间间隔。我要使用的日期在其自己的列中。我已经使用dplyr完成了以下操作:

  • 按ID对我的数据进行分组
  • 按ID排序

这是数据的外观。我希望输出为time_diff列。任何帮助将不胜感激!

ID: Status:    Start-time:   End-time:    time-diff:
1   Active      01/01/2018       NA           0
1   Complete      NA         01/02/2018       1
2   Active      03/02/2018                    0
2   Active        NA                          0
2   Complete      NA         03/06/2018       4

1 个答案:

答案 0 :(得分:0)

获取时间和NA值之间的时差将仅返回NA。一种更有意义的方法是,使每个事件的时间各不相同,然后对每个组进行总结(id)。

d <- tibble(id = c(1,1,2,2),
            st = ymd(c("2019-05-03", "2019-02-06", "2019-07-11","2019-05-13")),
            et = ymd(c("2019-05-10", "2019-02-16", "2019-07-04","2019-05-09")))

d2 <- d %>% 
  mutate(td  = et-st,         # calculate the time difference (td)
         atd = abs(td)) %>%   # calculate the absolute td (atd)
d2

# A tibble: 4 x 5
     id st         et         td      atd    
  <dbl> <date>     <date>     <time>  <time> 
1     1 2019-05-03 2019-05-10  7 days  7 days
2     1 2019-02-06 2019-02-16 10 days 10 days
3     2 2019-07-11 2019-07-04 -7 days  7 days
4     2 2019-05-13 2019-05-09 -4 days  4 days

然后您可以以绝对差的平均值为例,并获得:

d2 %>%
  group_by(id) %>%            # for each group (id)
  summarise(mtd = mean(atd))  # calculate the mean time difference (mtd)

# A tibble: 2 x 2
     id mtd     
  <dbl> <time>  
1     1 8.5 days
2     2 5.5 days