R在会话和参与者(RLE)中提取多个序列

时间:2019-03-26 01:17:38

标签: r data.table time-series sequential

我有一个时间序列数据集,参与者在其中进行了一系列操作,这些操作用代码标识(大约1-25)。参与者可以重复任何动作多次。我正在尝试折叠动作#6的任何顺序重复的实例。问题在于该动作可以在一个会话中重复1、2、3、4次,然后他们执行其他动作,然后将动作#6重复1、2次。我需要4和2。问题是会话和参与者相同,因此很难正确折叠(保留两个序列)。

data frame cumulative run length encoding in 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")

0 个答案:

没有答案