我有兴趣计算数据集的每个序列中存在的不同状态的数量。为简单起见,我将使用TraMineR示例:
从这个序列开始:
1230 D-D-D-D-A-A-A-A-A-A-A-D
然后使用seqdss
函数计算提取不同的状态:
1230 D-A-D
是否有一个函数来提取序列中不同状态的总数,只考虑状态的存在而不是序列中潜在的重复?换句话说,对于上述情况,我想获得一个包含该序列的向量值2
(事件A
和事件D
)而不是3(1个事件{{ 1}} + 2个事件A
)。
谢谢。
答案 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