Как сопоставить строку в строке и строке выше - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь удалить записи «Выйти из системы» или «Идентификация пользователя», которым предшествуют «Выйти из системы» или «Идентификация пользователя».
Я думал о том, чтобы поменять эти записи на «Удалить строку» для облегчения поднабора

фрагмент моих данных: Logduration

DateTime            Action                                   Duration    
2018-12-07 10:20:56 User Idled until session expired              439
2018-12-07 11:40:15 User session resumed.                          NA
2018-12-07 15:06:15 Logged Out. Logged in for 292.7 minutes     12360
2018-12-13 13:12:56 Login Successful                               NA
2018-12-13 15:13:43 User Idled until session expired             7247
2018-12-13 16:24:31 Logged Out. Logged in for 263.8 minutes      4248
2018-12-19 07:21:39 Login Successful                               NA

Я пытался "видоизменить" ячейку, но не могу получить правильное соответствие строки и строки выше.

Logduration <- Logduration %>%  
  mutate(`Action` = ifelse(
  grepl("Logged Out|User Idled", `Action`, ignore.case = TRUE) &
  grepl("Logged Out|User Idled", lag(`Action`), ignore.case = TRUE), 
  "Remove Row", `Action`))

Ожидаемый результат должен быть:

2018-12-07 10:20:56 User Idled until session expired              439
2018-12-07 11:40:15 User session resumed.                          NA
2018-12-07 15:06:15 Logged Out. Logged in for 292.7 minutes     12360
2018-12-13 13:12:56 Login Successful                               NA
2018-12-13 15:13:43 User Idled until session expired             7247
2018-12-13 16:24:31 Remove Row                                   4248
2018-12-19 07:21:39 Login Successful                               NA

1 Ответ

0 голосов
/ 15 января 2019

Поскольку вы пометили просто r, вот решение, использующее data.table и его функцию shift() для лагов / отведений вместо использования dplyr:

Logduration = data.table(Logduration)

Logduration[!(grepl("Logged Out|User Idled", 
                    shift(Action, 1, fill='', "lag"), ignore.case = TRUE) &
              grepl("Logged Out|User Idled", Action, ignore.case = TRUE))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...