Удалить последовательность отметок времени, где определенное условие истинно - PullRequest
0 голосов
/ 13 апреля 2020

Фон:

У меня есть набор данных, df, и я хотел бы записать дату и время 'Connect' и удалить действие, где:

ЕСЛИ 'Connect за «действием» сразу же следует действие, в котором повторяется следующее действие, или <= до 60 секунд, продолжайте итерацию, пока не достигнете значения «Завершено» (которое не показывает это условное поведение) и запишите это время. </p>

Выходной шаблон должен всегда следовать за 'Connect' и 'Ended'

We start with:

Connect            4/6/2020 1:11:41 PM

Then look to the next line:

Ended              4/6/2020 1:14:20 PM

Now look to the line that follows:

Attempt            4/6/2020 1:15:20 PM


These two timestamps are less than or equal to 60 seconds, so we keep going    
until we come across an Ended value where these conditions do not apply. 
So the Ended value of 

Ended              4/6/2020 2:05:18 PM    gets recorded.




Action             Time

Connect            4/6/2020 1:11:41 PM
Ended              4/6/2020 1:14:20 PM
Attempt            4/6/2020 1:15:20 PM
Connect            4/6/2020 1:15:21 PM
Ended              4/6/2020 2:05:18 PM
Connect            3/31/2020 11:00:08 AM
Ended              3/31/2020 11:14:54 AM
Ended              3/31/2020 4:17:43 PM

По сути, я хотел бы удалить эту часть набора данных:

Ended              4/6/2020 1:14:20 PM
Attempt            4/6/2020 1:15:20 PM
Connect            4/6/2020 1:15:21 PM
Ended              3/31/2020 4:17:43 PM

Требуемый выход:

Action              Time

Connect             4/6/2020 1:11:41 PM        
Ended               4/6/2020 2:05:18 PM
Connect             3/31/2020 11:00:08 AM
Ended               3/31/2020 11:14:54 AM

Выходной шаблон должен всегда следовать за 'Connect' и 'Ended'

Dput:

structure(list(Action = structure(c(2L, 3L, 1L, 2L, 3L, 2L, 3L, 
3L), .Label = c("Attempt", "Connect", "Ended"), class =     "factor"), 
 Time = structure(c(4L, 5L, 6L, 7L, 8L, 1L, 2L, 3L), .Label =      c("3/31/2020 11:00:08 AM", 
 "3/31/2020 11:14:54 AM", "3/31/2020 4:17:43 PM", "4/6/2020      1:11:41 PM", 
  "4/6/2020 1:14:20 PM", "4/6/2020 1:15:20 PM", "4/6/2020  1:15:21   PM", 
 "4/6/2020 2:05:18 PM"), class = "factor")), class =     "data.frame", row.names = c(NA, 
-8L))

Это то, что я пробовал:

Я думаю, что мне следует использовать al oop, но не совсем уверен, как это построить. Любая помощь приветствуется.

  library(lubridate)
  if (value <= 60) {
   print("") 
   } else {
   Expr2
   }
...