要從(文本創建一個事件序列對象)子序列,您必須將它們轉換爲垂直時間戳事件(TSE)格式。下面的功能爲您的數據做這項工作
## Function subseq.to.TSE
## puts the sequences into TSE format using
## position as timestamp
## sdf: a data frame with columns Id, Subsequence, Support and Count.
subseq.to.TSE <- function(sdf){
tse <- data.frame(id=0, event="", time=0)
k <- 0
for (i in 1:nrow(sdf)){
id <- sdf[i,"Id"]
s <- sdf[i,"Subsequence"]
ss <- gsub("\\(","",s)
ss <- gsub("\\)","",ss)
# split transitions
st <- strsplit(ss, split="-")[[1]]
for (j in 1:length(st)){
stt <- strsplit(st[j], split=",")[[1]]
for(jj in 1:length(stt)){
k <- k+1
tse[k,1] <- id
## parsing for simultaneous events
if (!(stt[jj] %in% levels(tse[,2])))
{levels(tse[,2]) <- c(levels(tse[,2]),stt[jj])}
tse[k,2] <- stt[jj]
tse[k,3] <- j
}
}
}
return(tse)
}
以下是您如何使用它的示例數據。
我們首先創建的數據幀,我們命名s.df
s.df <- data.frame(scan(what=list(Id=0, Subsequence="", Support=double(), Count=0)))
16 (WT4)-(WT3) 0.76666667 805
17 (WL2) 0.76380952 802
18 (S1) 0.76000000 798
19 (FRF,WL2) 0.74380952 781
20 (WT2)-(WT1) 0.70571429 741
# leave a blank line to end the scan
然後我們從s.df
提取TSE數據,並從它創建一個使用seqecreate
事件序列對象。最後,我們將計數分配爲序列權重。
s.tse <- subseq.to.TSE(s.df)
seqe <- seqecreate(s.tse)
seqeweight(seqe) <- s.df[,"Count"]
現在你可以例如繪製事件序列與
seqpcplot(seqe)
爲什麼要保存'seqefsub'爲文本的結果的打印,然後讀回爲序列對象? 'seqefsub'函數已經返回一個事件序列對象。你想將事件序列對象轉換爲狀態序列對象嗎? (如果是,請查看[http://stackoverflow.com/a/28968342/1586731])。請澄清你的問題。 – Gilbert
@吉爾伯特 - 我編輯了我的問題,我希望現在更清楚。 –