我有兴趣计算我的数据集的每个序列中存在的不同状态的数量。为简单起见,我将使用 TraMineR 示例:
从这个序列开始:
1230 D-D-D-D-A-A-A-A-A-A-A-D
seqdss
然后使用以下函数计算提取的不同状态:1230 D-A-D
是否有一个函数可以提取序列中不同状态的总数,仅考虑状态的存在而不考虑其沿序列的潜在重复?换句话说,对于上述情况,我想获得一个包含此序列的值2
(事件A
和事件D
)而不是 3(1 事件A
+ 2 事件D
)的向量。
谢谢你。
您可以计算不同状态的数量,方法是首先使用 计算每个序列的状态分布,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
我可能在这里遗漏了一些东西,但看起来你正在寻找unique
。
您的预期结果不清楚(可能是因为您用英语而不是伪代码来描述它)。我猜你正在寻找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