У меня есть фрейм данных:
Time CardID Data Type
1 2018-01-01 10:44:35 10037479 PowerOn STBEvent
2 2018-01-01 10:44:48 10037479 0401 UseRemote
3 2018-01-01 10:44:53 10037479 0301 UseRemote
4 2018-01-01 10:45:13 10037479 0401 UseRemote
5 2018-01-01 10:45:24 10037479 0301 UseRemote
6 2018-01-01 10:45:30 10037479 1415 LiveView
7 2018-01-01 10:45:37 10037479 0401 UseRemote
8 2018-01-01 11:08:01 10037479 1412 LiveView
9 2018-01-01 11:08:13 10037479 0401 UseRemote
10 2018-01-01 11:14:31 10037479 0301 UseRemote
structure(list(Time = structure(c(1514783675, 1514783688, 1514783693,
1514783713, 1514783724, 1514783730, 1514783737, 1514785081, 1514785093,
1514785471), class = c("POSIXct", "POSIXt")), CardID = c("10037479",
"10037479", "10037479", "10037479", "10037479", "10037479", "10037479",
"10037479", "10037479", "10037479"), Data = c("PowerOn", "0401",
"0301", "0401", "0301", "1415", "0401", "1412", "0401", "0301"
), Type = c("STBEvent", "UseRemote", "UseRemote", "UseRemote",
"UseRemote", "LiveView", "UseRemote", "LiveView", "UseRemote",
"UseRemote")), .Names = c("Time", "CardID", "Data", "Type"), row.names = c(NA,
10L), class = "data.frame")
Я использую функции опережения и запаздывания из dplyr для выборки точек данных до и после определенной строки.Например, я использую это:
ae1 <- which(dplyr::lag(df$Data)=="1415")+1
Это дает мне номер строки 6 из вышеупомянутого фрейма данных, где тип равен "LiveView".Я понимаю, что, изменив целое число в конце кода, я мог бы получить соответствующую строку из фрейма данных.У меня вопрос: могу ли я использовать ту же / аналогичную функцию, в которой я могу получать данные для следующего «LiveView» - строки № 8. Я вполне могу сделать
ae1 <- which(dplyr::lag(df$Data)=="1415")+3
, чтобы получить строку № 8. Носледующий тип LiveView может появляться в любой строке, кроме 8. Я думаю, что-то похожее на
ae1 <- which(dplyr::lag(df$Data)=="1415")+nrow(where Type == next "LiveView")