TraMineR,提取所有存在的事件组合作为虚拟变量
TraMineR, Extract all present combination of events as dummy variables
假设我有这些数据。我的objective是提取序列的组合。
我有一个限制,两个事件之间的时间不能超过 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.
我试图为此使用许多 for 循环编写一个函数,但如果序列变大并且事件的不同数量也变大,它就会变得非常复杂。而且如果不同用户的数量增长到 100 000。
是否可以在 TraMineR 中借助 seqeconstraint
执行此操作?
以下是使用 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
是一个 table,每个子序列在数据集中至少出现一次。因此,如果您有多个个体(事件序列),table 每个个体一行,列将是您要查找的二进制变量。 (另请参阅 TraMineR: Can I get the complete sequence if I give an event sub sequence?)
但是,请注意 TraMineR
仅适用于长度不超过 4 或 5 的子序列。我们建议在 seqefsub
中设置 maxK=3
或 4
.只要您限制要查找的最大子序列长度,个人的数量应该不是问题,不同的可能事件(字母表)的数量也不应该成为问题。
希望对您有所帮助
假设我有这些数据。我的objective是提取序列的组合。
我有一个限制,两个事件之间的时间不能超过 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.
我试图为此使用许多 for 循环编写一个函数,但如果序列变大并且事件的不同数量也变大,它就会变得非常复杂。而且如果不同用户的数量增长到 100 000。
是否可以在 TraMineR 中借助 seqeconstraint
执行此操作?
以下是使用 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
是一个 table,每个子序列在数据集中至少出现一次。因此,如果您有多个个体(事件序列),table 每个个体一行,列将是您要查找的二进制变量。 (另请参阅 TraMineR: Can I get the complete sequence if I give an event sub sequence?)
但是,请注意 TraMineR
仅适用于长度不超过 4 或 5 的子序列。我们建议在 seqefsub
中设置 maxK=3
或 4
.只要您限制要查找的最大子序列长度,个人的数量应该不是问题,不同的可能事件(字母表)的数量也不应该成为问题。
希望对您有所帮助