查找序列中的特定模式

时间:2015-01-23 13:46:27

标签: r traminer

我使用R包TraMineR进行一些学术研究序列分析。

我想找到一个模式,定义为某人在目标公司,然后出去,然后回到目标公司。

(简化)我将州A定义为目标公司; B作为外部工业公司,C作为内部工业公司。

所以我想做的是找到具有特定模式A-B-A或A-C-A的序列。

在查看此问题(Strange number of subsequences?)并阅读用户指南后,特别是以下段落:

  

4.3.3子序列   如果u的所有连续元素ui在x中同样出现,则序列u是x的子序列   顺序,我们简单地用u x表示。根据这种说法,可以出现未共享的>状态   在序列u和x之间共同的那些之间。例如,u = S; M是>子序列   x = S; U;米; MC。

  

7.3.2查找具有给定子序列的序列   seqpm()函数计算包含给定子序列并收集的序列数   他们的行索引号。该函数返回一个包含两个元素的列表。第一个元素,MTab,   只是一个表格,其中包含数据中给定子序列的出现次数。注意   即使子序列出现多于一个,每个序列也只计算一次出现次数   时间顺序。列表的第二个元素MIndex给出行索引号   包含子序列的序列。这些索引号可能对访问时有用   有关序列(下面的例子)。由于在字符串中搜索模式更容易,   当使用seqconc函数时,函数rst以这种格式转换序列数据   TRUE选项。

我得出结论,seqpm()是完成工作所需的功能。

所以我有以下序列: A-A-A-A-A-B-B-B-B-B-A-A-A-A-A

根据我在mentiod源上找到的子序列的定义,我想通过使用我可以找到那种序列:

seqpm(sequence,"ABA")

但这不会发生。为了找到我需要输入的示例序列

seqpm(sequence,"ABBBBBA")

对我需要的东西不是很有用。

  1. 所以你们看到我可能会错过什么?
  2. 如何检索从A到B并返回到A?
  3. 的所有序列
  4. 有没有办法让我找到从A到其他任何东西,然后回到A?
  5. 非常感谢!

1 个答案:

答案 0 :(得分:3)

seqpm帮助页面的标题是"查找序列中的子字符串模式",这就是函数实际执行的操作。它搜索包含给定子字符串(而不是子序列)的序列。似乎用户指南中存在配方错误。

找到包含给定子序列的序列的解决方案是将状态序列转换为seqecreate的事件序列,然后使用seqefsubseqeapplysub函数。我将使用actcal附带的TraMineR数据进行说明。

library(TraMineR)
data(actcal)
actcal.seq <- seqdef(actcal[,13:24])

## displaying the first state sequences
head(actcal.seq)

## transforming into event sequences
actcal.seqe <- seqecreate(actcal.seq, tevent = "state", use.labels=FALSE)

## displaying the first event sequences
head(actcal.seqe)

## now searching for the subsequences
subs <- seqefsub(actcal.seqe, strsubseq=c("(A)-(D)","(D)-(B)"))
## and identifying the sequences that contain the subsequences
subs.pres <- seqeapplysub(subs, method="presence")
head(subs.pres)

## we can now, for example, count the sequences that contain (A)-(D)
sum(subs.pres[,1])
## or list the sequences that contain (A)-(D)
rownames(subs.pres)[subs.pres[,1]==1]

希望这会有所帮助。