Время вменения, основанное на условии - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь вменять время на основе значения предыдущей строки.

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

Для каждого столбца идентификатора, а также если разность Даты меньше 2 и если Time1 равно NA, а предыдущее смежное Time2 равно NA, затем я хочу заменить «00:00:01» в Time1 и «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, ноне может получить это правильно

1 Ответ

0 голосов
/ 01 ноября 2019

Отсутствует пример воспроизводимых данных, я могу только догадываться, что это поможет вам:

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
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...