这个问题实际上来自于我自己问过的这个问题(Find specific patterns in sequences),但我认为这是一个单独的问题。
在吉尔伯特的回应之后,我尝试从状态序列创建事件序列,但我遇到了问题。
建议是使用
seqe=seqecreate(comp.seq,tevent="state")
然后使用
seqefsub(seqe,strsubseq="(a)-(d)")
但是当我尝试使用seqecreate()时,我收到以下错误:
Error in `seqelength<-`(`*tmp*`, value = c(64, 64, 64, 64, 61, 62, 61, : (...)
s and len should be of the same size.
如果我尝试使用以下方法将其转换为事件序列,也会发生同样的情况:
seqe=seqecreate(comp.seq,tevent="transition")
尝试使用行的子集并确定导致问题的行,我发现有问题的行都处于常量状态,这意味着它们实际上没有转换,它们永久保留在同一个定位器中(例如AAAAAA)。
所以我的问题是:
如果不是,我怎么能删除这些行,因为它们的长度不同,缺少值。例如,我可能有如下序列:
缺失缺失-A-A-A-A A-A缺失缺失缺失缺失缺失
提前多多感谢!
提供我的数据样本:
comp.seq <- seqdef(comp,NULL,states=comp.scodes,labels=comp.labels, alphabet=comp.alphabet,missing="Z")
comp.seq[1:7,]
1 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-B-B-B-B-B-B-B-B-D-D-D-D-D-A-A-A-A-A-A-A-A-A
2 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-C-C-C-C-C-C-C-C-C-C-C-C-C-C-*-B-B-B-B-B-B-B-B-B-B-B-B-B-A-A-A-A-A-A
3 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-A-A-A-C-C-A-A-A-A-A-A-A-D-D-A-A-A-A-A-A-A-A
4 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-B-B-B-B-B-B-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A
5 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-C-C-D-D-D-D-D-D-D-D-D-D-A-A-A-A-A
6 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-B-B-B-B-B-B-B-B-B-B-B-B-B-D-D-D-D-D-D-D-D-A-A-A-A
7 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-A-A-A-A-A-A-A-A-A-A-A-A
seqecreate(comp.seq[1:6,])
,则可以使用
答案 0 :(得分:3)
当缺少状态且序列长度不同时,会发生错误。解决方法是在right="NA"
来电中设置seqdef
。
这是一个最小的例子:
x1 <- "*-*-A-B"
x2 <- "*-A-A"
dat.str <- data.frame(string=rbind(x1,x2))
dat <- seqdecomp(dat.str, sep="-", miss="*")
## creating state sequence object with and without right="NA"
dat.seq.NA <- seqdef(dat, right="NA")
dat.seq.void <- seqdef(dat)
## next command works without error
dat.eseq <- seqecreate(dat.seq.NA, tevent="state")
## while this one produces the error
dat.eseq <- seqecreate(dat.seq.void, tevent="state")
答案 1 :(得分:1)
因此,在我使用的序列中,我设置了缺失值的代码,missing="Z"
函数中的seqdef()
选项。
我设法通过不设置missing
选项并创建“虚拟”状态Z来使其工作,我添加到字母表和标签“Z-missing”。我还设置了选项left="Z"
和right="Z"
。
对我来说仍然看起来像个错误。
答案 2 :(得分:0)
我不确定这可能是答案,但在这个Cran Page http://cran.r-project.org/web/packages/TraMineR/NEWS上,他们谈到了TraMineR的开发版1.9.8,他们引用了一个错误:
错误修复: - seqformat():当从STS转换为TSE时,如果出现错误则引发错误 tevent矩阵有空字符串(即“”)。现在,这被视为无事件。
情况并非如此,因为序列本身不是 ,但它可能是同一个问题。我相信他们在内部使用seqformat()函数,因此我可能会以某种方式与错误相关。
我将下载开发版并发布她的演绎方式。