【问题标题】:Imputing Time based on condition根据条件估算时间
【发布时间】:2019-10-31 18:10:49
【问题描述】:

我正在尝试根据上一行的值来估算时间。

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 的超前和滞后值,但无法正确获得该值

【问题讨论】:

    标签: r datatable dplyr


    【解决方案1】:

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

    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
        )
    )
    

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2019-06-10
      • 2014-09-20
      • 2020-10-25
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多