如何在序列数据集中找到满足某些条件的行

机器算法验证 电车
2022-03-21 05:42:55

这是我以 SPELL 格式生成的序列数据的摘要。所有序列都应该具有相同的 1440 长度,但摘要告诉我它们不一样(请参阅“最小/最大序列长度:91/1440”)。

我想找到行:

  1. 没有 1440 序列长度的
  2. 缺少状态 (*)
  3. 有空元素 (%)

你有什么建议吗?

> summary(diary.seq)  
 [>] sequence object created with TraMineR version 1.8-3  
 [>] 4971 sequences in the data set, 4160 unique  
 [>] min/max sequence length: 91/1440  
 [>] alphabet (state labels):  
     1=Cr (Cr)  
     2=Ec (Ec)  
     3=Eo (Eo)  
     4=Hb (Hb)  
     5=Hc (Hc)  
     6=He (He)  
     7=Hr (Hr)  
     8=Hs (Hs)  
     9=Ir (Ir)  
     10=Lt (Lt)  
     11=Or (Or)  
     12=Pb (Pb)  
      ...  
 [>] dimensionality of the sequence space: 27360  
 [>] colors: 1= 2= 3= 4= 5= 6= 7= 8= 9= 10= 11= 12= 13= 14= 15= 16= 17= 18= 19= 20=  
 [>] symbol for missing state: *  
 [>] symbol for void element: %  
1个回答

要选择一些序列,您需要创建一个条件向量。例如,您可以使用 seqlength 函数选择长度小于 1440 的序列。这是“mvad”数据集的示例。

## Loading the library
library(TraMineR)
data(mvad)
## Defining sequence properties
mvad.alphabet <- c("employment", "FE", "HE", "joblessness", "school", "training")
mvad.lab <- c("employment", "further education", "higher education", "joblessness", "school", "training")
mvad.shortlab <- c("EM", "FE", "HE", "JL", "SC", "TR")
## The state sequence object.
mvad.seq <- seqdef(mvad, 17:86, alphabet = mvad.alphabet, states = mvad.shortlab, labels = mvad.lab, xtstep = 6)

现在我们可以计算序列长度并构建向量(这里所有序列的长度都是 70,所以它没有多大意义......)。我们使用了“<=”,否则不会选择任何序列,但在您的情况下,您应该使用“<”。

condition <- seqlength(mvad.seq) <= 70
seqdplot(mvad.seq[condition, ])

要计算状态在每个序列中出现的次数,您可以使用“seqistatd”函数。例如,如果我们想选择所有具有“JL”(失业)状态的序列,我们可以使用:

state.count <- seqistatd(mvad.seq)
condition <- state.count[, "JL"] > 0
seqdplot(mvad.seq[condition, ])

您可以对“*”缺失状态使用相同的策略。无需计算“%”(无效),因为这将导致与使用“seqlength”完全相同的结果。