Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在序列中找到特定的模式_R_Traminer - Fatal编程技术网

R 在序列中找到特定的模式

R 在序列中找到特定的模式,r,traminer,R,Traminer,我正在使用R软件包TraMineR对序列分析进行一些学术研究 我想找到一个模式,定义为某人在目标公司,然后离开,然后回到目标公司 (简化)我将州A定义为目标公司;B为外部工业公司,C为内部工业公司 所以我想做的是找到具有特定模式A-B-A或A-C-A的序列 看了这个问题()并阅读了用户指南,特别是以下段落: 4.3.3子序列 如果u的所有连续元素ui>在同一时间出现在x中,则序列u是x的子序列 顺序,我们用ux表示。根据这种否认,可以出现非共享>状态 在序列u和x共有的序列之间。例如,u=S;M

我正在使用R软件包TraMineR对序列分析进行一些学术研究

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

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

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

看了这个问题()并阅读了用户指南,特别是以下段落:

4.3.3子序列 如果u的所有连续元素ui>在同一时间出现在x中,则序列u是x的子序列 顺序,我们用ux表示。根据这种否认,可以出现非共享>状态 在序列u和x共有的序列之间。例如,u=S;M是的>子序列 x=S;UM司仪

7.3.2寻找具有给定子序列的序列 函数的作用是:计算包含给定子序列的序列数并收集 它们的行索引号。函数返回一个包含两个元素的列表。rst元素MTab, 只是一个表,其中包含数据中给定子序列的出现次数。注意 每个序列只计算一次出现次数,即使子序列出现多个 顺序中的时间。列表的第二个元素MIndex给出了 包含子序列的序列。这些索引编号对于访问 相关序列(示例如下)。因为在字符串中搜索模式更容易, 当将seqconc函数用于 真正的选择

我得出结论,seqpm()是完成工作所需的函数

所以我有这样的序列: A-A-A-A-B-B-B-B-A-A-A-A-A-A

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

seqpm(sequence,"ABA")
但事实并非如此。为了找到示例序列,我需要输入

seqpm(sequence,"ABBBBBA")
这对我所需要的不是很有用

  • 你们知道我在哪里漏掉了什么吗
  • 如何检索从A到B再返回A的所有序列
  • 有没有办法让我从a转到其他任何东西,然后再回到a

  • 非常感谢

    帮助页面的标题是“查找序列中的子字符串模式”,这就是函数的实际功能。它搜索包含给定子字符串(不是子序列)的序列。用户指南中似乎存在公式错误

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

    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]
    
    库(TraMineR)
    数据(actcal)
    
    噢,我希望他们有一个工具可以直接在状态序列上进行搜索。我会把这个建议和用户指南上的困惑通过电子邮件发送给他们。谢谢,这很有帮助!我很难理解ob seqapplysub()的响应格式。我的问题是,当我检查subs对象时,它会显示count=6,但当我检查subs.pres对象时,它会打印一堆行(比计数多得多)。我更改了这行代码:subs
    sequeaplysub
    返回一个矩阵,每个原始序列有一行,搜索的每个子序列有一列(在上面的示例中有两个)。列中的1表示包含相应子序列的序列,0表示不包含相应子序列的序列。因此,
    sequefsub
    (6,在您的情况下)返回的计数对应于列中的1个数。谢谢!有没有办法获取它们的索引?只需使用
    哪个
    。例如,
    索引