首页 > 解决方案 > 根据条件估算时间

问题描述

我正在尝试根据前一行值估算时间。

Concat               ID     Date           Time1    Time2
1615 - 2019-05-14   1615   5/14/2019    20:57:56    21:26:45
161 - 2019-05-14    161    5/14/2019    21:52:19    NA
161 - 2019-05-15    161    5/15/2019    NA          1:10:49
161 - 2019-05-14    161    5/17/2019    21:52:19    NA
161 - 2019-05-15    161    5/20/2019    NA          1:10:49

对于每个 ID 列,如果日期差异小于 2,并且如果 Time1 为 NA 并且之前相邻的 Time2 为 NA,那么我想替换 Time1 中的“00:00:01”和“23:59:59”中的前一个相邻的 NA 如下所示。

 Concat              ID     Date           Time1    Time2
1615 - 2019-05-14   1615   5/14/2019    20:57:56    21:26:45
161 - 2019-05-14    161    5/14/2019    21:52:19    23:59:59
161 - 2019-05-15    161    5/15/2019    00:00:01    1:10:49
161 - 2019-05-14    161    5/17/2019    21:52:19    NA
161 - 2019-05-15    161    5/20/2019    NA          1:10:49

我尝试使用 dplyr 的领先和滞后值,但无法正确获得

标签: rdatatabledplyr

解决方案


缺少可重现的数据示例,我只能猜测这会对您有所帮助:

library(dplyr)
library(lubridate)

df %>%
  group_by(ID) %>%
  mutate(
    Time1_fixed = ifelse(
      (lag(Date,1)+1 == Date) & # the previous Date was one day before this one
       is.na(Time1) & # AND this Time1 is NA
       is.na(lag(Time2,1)), # AND the previous Time1 was NA
      '00:00:01',
      Time1
    ),
    Time2_fixed = ifelse(
      (lead(Date,1) == Date+1) & # the next Date is one day after this one
       is.na(Time2) & # AND this Time2 is NA
       is.na(lead(Time1,1)), # AND the next Time1 is NA
      '23:59:59',
      Time2
    )
)

推荐阅读