让我说我有这些数据。我的目标是序列的外推组合
我有一个约束,两个事件之间的时间可能不超过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)
由于maxGap
&gt; (CB)和(CBC)将为0。 5.
我试图使用许多for循环为此编写一个函数,但是如果序列变大并且不同数量的evet也变得更大,它变得非常复杂。而且如果不同用户的数量增长到10万。
是否可以在seqeconstraint
的帮助下在TraMineR中执行此操作?
答案 0 :(得分:1)
以下是使用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: Can I get the complete sequence if I give an event sub sequence?)
但是,请注意,TraMineR
仅适用于长度最多约为4或5的子序列。我们建议在maxK=3
中设置4
或seqefsub
。只要你限制你正在寻找的最大子序列长度,个体数量就不应该是问题,也不应该是不同可能事件(字母表)的数量。
希望这有帮助