【问题标题】:Number of different states/events in a sequence with TraMineRTraMineR 序列中不同状态/事件的数量
【发布时间】:2013-06-24 02:02:22
【问题描述】:

我有兴趣计算我的数据集的每个序列中存在的不同状态的数量。为简单起见,我将使用 TraMineR 示例:

  1. 从这个序列开始:

    1230 D-D-D-D-A-A-A-A-A-A-A-D

  2. 然后使用seqdss 函数计算提取的不同状态:

    1230 D-A-D

是否有一个函数可以提取序列中不同状态的总数,仅考虑状态的存在而不考虑其沿序列的潜在重复?换句话说,对于上述情况,我想获得一个向量,其中包含此序列的值2(事件A 和事件D)而不是3(1 事件A + 2 事件@987654328 @)。
谢谢。

【问题讨论】:

    标签: r traminer


    【解决方案1】:

    您可以通过首先使用seqistatd 计算每个序列的状态分布,然后将seqistatd 返回的矩阵的每一行中非零元素的数量相加来计算不同状态的数量。下面我使用 biofam 数据进行说明:

    library(TraMineR)
    data(biofam)
    bf.seq <- seqdef(biofam[,10:25])
    
    ## longitudinal distributions 
    bf.ldist <- seqistatd(bf.seq)
    n.states <- apply(bf.ldist,1,function(x) sum(x != 0))
    
    ## displaying results
    bf.ldist[1:3,]
         0  1 2 3 4 5 6 7
    1167 9  0 0 1 0 0 6 0
    514  1 10 0 1 0 0 4 0
    1013 7  5 0 1 0 0 3 0
    
    n.states[1:3]
    1167  514 1013 
       3    4    4 
    

    【讨论】:

    • 我在寻找什么。谢谢吉尔伯特!
    【解决方案2】:

    我可能在这里遗漏了一些东西,但看起来你在寻找unique

    【讨论】:

    • aggregate 将给出AD 出现的总数,而不是状态数(2:AD)。
    【解决方案3】:

    您的预期结果不清楚(可能是因为您用英语而不是伪代码来描述它)。我猜你正在寻找table 来计算每个主题的状态数。这里我使用的是TraMineR提供的包:

    library(TraMineR)
    data(actcal)
    actcal.seq <- seqdef(actcal,13:24)
    head(actcal.seq )
    
         Sequence               
    2848 B-B-B-B-B-B-B-B-B-B-B-B
    1230 D-D-D-D-A-A-A-A-A-A-A-D
    2468 B-B-B-B-B-B-B-B-B-B-B-B
    654  C-C-C-C-C-C-C-C-C-B-B-B
    6946 A-A-A-A-A-A-A-A-A-A-A-A
    1872 D-B-B-B-B-B-B-B-B-B-B-B
    

    现在将table 应用到第 4 行,例如:

    tab <- table(unlist(actcal.seq[4,]))
    tab[tab>0]
    B C 
    3 9
    

    【讨论】:

    • 这可能是第一步,因为我正在寻找一种方法来计算非零元素而不是每个序列的每个状态的出现。谢谢。
    • @emanuela.struffolino 我编辑我的答案以获得所需的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多