假设我有这些数据。我的目标是提取序列的组合。我有一个限制,两个事件之间的时间不能超过 5,我们称之为
maxGap
。
User <- c(rep(1,3)) # One users
Event <- c("C","B","C") # Say this is random events could be anything from LETTERS[1:4]
Time <- c(c(1,12,13)) # This is a timeline
df <- data.frame(User=User,
Event=Event,
Time=Time)
如果想用这些序列作为二元解释变量进行分析。
给定这个数据框,结果应该是这样的。
res.df <- data.frame(User=1,
C=1,
B=1,
CB=0,
BC=1,
CBC=0)
(CB) 和 (CBC) 将为 0,因为
maxGap
> 5。是否可以在
seqeconstraint
的帮助下在 TraMineR 中执行此操作?
这是您如何使用
TraMineR
来做到这一点
df.seqe <- seqecreate(id=df$User, timestamp=df$Time, event=df$Event)
constr <- seqeconstraint(maxGap=5)
subseq <- seqefsub(df.seqe, minSupport=0, constraint=constr)
(presence <- seqeapplysub(subseq, method="presence"))
这给出了
(B) (B)-(C) (C)
1-(C)-11-(B)-1-(C) 1 1 1
presence
是一个表,其中每个子序列在数据集中至少出现一次。因此,如果您有多个个体(事件序列),则表中每个个体占一行,列将是您要查找的二进制变量。 (另请参阅TraMineR:如果我给出事件子序列,我可以获得完整的序列吗?)
但是,请注意,
TraMineR
仅适用于长度不超过 4 或 5 的子序列。我们建议在 maxK=3
中设置 4
或 seqefsub
。只要您限制要查找的最大子序列长度,个体的数量就不应该成为问题,不同的可能事件(字母表)的数量也不应该成为问题。
希望这有帮助