计算R中其他字符串前面的字符串数

时间:2015-12-08 15:59:21

标签: r string count

我有一个txt数据文件列表。它们中的每一个都是参与者在一组任务中所采取的所有行动的记录。一项任务的一个示例数据是:

[245] "2015-02-20 11:11:02|    134602| end of mat task (passed: 4/5)"                                                                                    
[246] "2015-02-20 11:11:02|    134599| step E9 abandoned - skipping to next"                                                                             
[247] "2015-02-20 11:11:01|    133596| step E9 bad choice - error limit reached"                                                                         
[248] "2015-02-20 11:10:47|    120007| intruder D started"                                                                                               
[249] "2015-02-20 11:10:47|    119792| step E9 bad choice"                                                                                               
[250] "2015-02-20 11:10:38|    110857| step E9 started"                                                                                                  
[251] "2015-02-20 11:10:37|    109844| step E1 success"                                                                                                  
[252] "2015-02-20 11:10:28|    101030| step E1 started"                                                                                                  
[253] "2015-02-20 11:10:27|    100018| step D10 success"                                                                                                 
[254] "2015-02-20 11:10:07|     79625| step D10 started"                                                                                                 
[255] "2015-02-20 11:10:06|     78609| step C12 success"                                                                                                 
[256] "2015-02-20 11:10:02|     74713| step C12 bad choice"                                                                                              
[257] "2015-02-20 11:09:50|     62673| step C12 started"                                                                                                 
[258] "2015-02-20 11:09:49|     61642| step B8 success"                                                                                                  
[259] "2015-02-20 11:09:47|     60003| intruder B started"                                                                                               
[260] "2015-02-20 11:09:33|     46047| step B8 started"                                                                                                  
[261] "2015-02-20 11:09:33|     46032| mats: B8,C12,D10,E1,E9"                                                                                           
[262] "2015-02-20 11:09:33|     46032| mat task: B8,C12,D10,E1,E9 displayed..."  

现在,对于我列表中的每个元素,我需要计算"错误选择"显示消息,但只有当它出现在" success"之后,所以我需要计算一个人犯了错误并成功纠正它的实例数(数据从底部保存到顶部,所以更新事件高于旧事件。)

其次,程序中有一些入侵者任务被随机激活,并且可能是以"入侵者开始的消息......" (例如"入侵者B开始")可能出现在"糟糕的选择"和"成功"消息(在上面的示例中不是这种情况,但它可能发生在数据中)。所以我还需要包含"入侵者的实例......"消息(但不是其他消息)出现在相关的两条消息之间。

我很感激有关如何以最佳方式处理此问题的任何提示。

1 个答案:

答案 0 :(得分:1)

这里有一些虚拟数据......应该让你对问题的第一部分有所了解。

lines <- c("2015-02-20 11:11:02|    134602| end of mat task (passed: 4/5)",
           "2015-02-20 11:11:02|    134599| step E9 abandoned - skipping to next",
           "2015-02-20 11:11:01|    133596| step E9 bad choice - error limit reached",
           "2015-02-20 11:10:38|    110857| step E9 started",
           "2015-02-20 11:10:37|    109844| step E1 success",
           "2015-02-20 11:10:02|     74713| step C12 bad choice")
grep('bad choice', lines[grep('success', lines) + 1], value=TRUE)

第二部分可能类似,只是将一行分成几行,在那里你检查你的&#34;入侵者&#34;如果是这样,只需添加或减去1。

在评论中建议antoine-sac,您可以使用

预先删除入侵者
tmp <- lines[!grepl(lines, "^intruder.+started$"]
grep('bad choice', tmp[grep('success', tmp) + 1], value=TRUE)