seqecreate 按字母顺序重新排序事件

seqecreate reorders events alphabetically

我正在使用 Traminer seqecreate 函数创建一个事件序列。但是,同时发生的事件在创建的事件序列对象中按字母顺序重新排序。

数据按发生事件的顺序排序,但是在创建事件序列对象时,同时发生的事件按字母顺序重新排序。

我可以手动组合同时发生的事件,但只是想问一下如何确保 seqecreate 不会重新排序事件

library("dplyr")
library("TraMineR")
# DATA
eventDat <- data.frame(id = c(rep(1,4), rep(2,10), rep(3,12)),
                        timeframe = c(rep(0,3),1,rep(0,3),rep(458,3),rep(558,2),559,560,
                                      rep(0,3),8,rep(48,3),57,169,170,511,546),
                        event = c("I01,I02,I03,I17,I05,I16","T222,T511,T30,T12","noProc",
                                  "apcdischarge","I01","T222,T221,T53","aedischarge",
                                  "I03,I05,I06","T222,T511,T30,T17","aedischarge",
                                  "I01,I02,I03,I05,I16,I14,I17,I07,I06",
                                  "T222,T516,T291,T30","M472","apcdischarge",
                                  "I01,I02,I05,I03","T12,T25,T30,T222,T291",
                                  "noProc","apcdischarge","I01,I02,I05,I03,I17",
                                  "T222,T221,T511,T30","noProc","apcdischarge",
                                  "noProc","apcdischarge","E852,E851,U201","apcdischarge"
                        ))


seqDat<- seqecreate(id=eventDat$id, 
                  timestamp=eventDat$timeframe,
                  event=eventDat$event)

seqDat[1]

#Warning message:
# In seqecreate.internal(data = data, id = id, timestamp = timestamp,  :
# [!] some of your events contain '(', ')' or ',' characters. 
# The search of specific subsequences may not work properly.

# remove commas
# Fix events contain '(', ')' or ',' characters
eventDat <- eventDat %>%
  rowwise()%>%
  mutate(eventF = paste0(trimws(strsplit(as.character(event), ",")[[1]], "b"), 
                        collapse = "."))

#order by ID and time frame
eventDat <- eventDat %>%
  arrange(id, timeframe)

seqDat<- seqecreate(id=eventDat$id, 
                    timestamp=eventDat$timeframe,
                    event=eventDat$eventF)
seqDat[1]

正在生成的输出是

(I01.I02.I03.I17.I05.I16,noProc,T222.T511.T30.T12)-1-(apcdischarge)

不过我期待

(I01.I02.I03.I17.I05.I16,T222.T511.T30.T12,noProc)-1-(apcdischarge)

当不是一个因素时,seqecreateevent 参数默认通过按字母顺序排列级别被强制转换为一个因素。您可以通过将所需级别顺序作为事件参数传递自定义因子来设置自己的顺序。

我用你的例子来说明:

我们检索当前级别顺序并将 "noProc" 事件设置为最后一个元素

ev.list <- levels(factor(eventDat$eventF))
ev.alph <- c(ev.list[ev.list!="noProc"],"noProc")

现在我们使用事件字母表的所需顺序定义因子,并将其作为 event 参数

传递
event <- factor(eventDat$eventF, levels=ev.alph)  
seqDat<- seqecreate(id=eventDat$id, 
                    timestamp=eventDat$timeframe,
                    event=event)
seqDat[1]

## [1] (I01.I02.I03.I17.I05.I16,T222.T511.T30.T12,noProc)-1-(apcdischarge)