R извлечение нескольких последовательностей в сессиях и участниках (RLE) - PullRequest
0 голосов
/ 26 марта 2019

У меня есть набор данных временного ряда, где участники выполнили серию действий, которые идентифицированы с помощью кодов (прибл. 1-25). Участники могут повторять любое действие любое количество раз. Я пытаюсь свернуть любые последовательные, повторяющиеся случаи действия № 6. Проблема состоит в том, что действие может повторяться 1,2,3,4 раза в сеансе, затем они выполняли другие действия, и затем действие # 6 повторяется 1, 2 раза снова. Мне нужны как 4, так и 2. Проблема в том, что сессия и участник одинаковы, поэтому сложно правильно свернуть (сохраняя обе последовательности).

Я пробовал этот код, благодаря кодированию накопленной длины кадра фрейма данных в R :

x <- rle(full_data2$action_name)       ## run rle on the relevant column
new <- sequence(x$lengths)       ## create a sequence of the lengths values
new = as.data.frame(new)
full_data2$rle = new

Это создало столбец с последовательностями в данных. Но я изо всех сил пытаюсь извлечь только максимальное число всех последовательностей для каждого учащегося, без каких-либо других переменных, которые я могу использовать, чтобы свернуть.

Как я могу свернуть это, чтобы наибольшее количество всех последовательностей RLE оставалось в сеансе? В данных примера мне нужны 13, 6 и 2. Вот вывод dput для данных образца:


structure(list(student_id = c(3935850L, 3935850L, 3935850L, 3935850L, 
3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 
3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 
3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 3935850L, 
3935850L, 3935850L, 3935850L), act_time = structure(c(1L, 1L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 6L, 6L, 7L, 8L, 9L, 
9L, 9L, 9L, 10L, 10L, 10L, 11L, 12L, 12L, 12L), .Label = c("2017-12-10 00:39:52", 
"2017-12-10 00:40:17", "2017-12-10 00:40:18", "2017-12-10 00:40:19", 
"2017-12-10 00:40:36", "2017-12-10 00:40:37", "2017-12-10 00:40:38", 
"2017-12-10 00:40:42", "2017-12-10 00:41:03", "2017-12-10 00:41:04", 
"2017-12-10 00:41:08", "2017-12-10 00:41:45"), class = "factor"), 
    code = c(25L, 19L, 25L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 6L, 19L, 25L, 6L, 6L, 6L, 6L, 6L, 6L, 19L, 25L, 
    6L, 6L), sequence = c(1L, 1L, 1L, 1L, 2L, 3L, 4L, 5L, 6L, 
    7L, 8L, 9L, 10L, 11L, 12L, 13L, 1L, 1L, 1L, 2L, 3L, 4L, 5L, 
    6L, 1L, 1L, 1L, 2L)), .Names = c("student_id", "act_time", 
"code", "sequence"), row.names = c(NA, -28L), class = "data.frame")

...