TraMineR序列中不同状态/事件的数量

时间:2013-06-23 13:18:16

标签: r traminer

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

  1. 从这个序列开始:

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

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

    1230 D-A-D

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

3 个答案:

答案 0 :(得分:3)

您可以通过首先使用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 

答案 1 :(得分:0)

我可能在这里遗漏了一些东西,但看起来你好像在unique之后。

答案 2 :(得分:0)

您的预期结果不明确(可能是因为您用英语而不是伪代码描述)。我猜你在寻找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