sequecreate按字母顺序重新排列事件

sequecreate按字母顺序重新排列事件,r,traminer,R,Traminer,我正在使用Traminer sequecreate函数创建事件序列。但是,同时发生的事件将在事件序列对象中按字母顺序重新排序 数据按发生事件的顺序排序,但在创建事件序列对象时,同时发生的事件按字母顺序重新排序 我可以手动组合同时发生的事件,但我只想问一下如何确保SekeCreate不会对事件重新排序 library("dplyr") library("TraMineR") # DATA eventDat <- data.frame(id = c(rep(1,4), rep(2,10), r

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

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

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

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,T222.T511.T30.T12,noProc)-1-(apcdischarge)

如果不是因子,则默认情况下,
seqecreate
事件
参数通过按字母顺序排列的方式强制为因子。您可以通过传递一个自定义因子,并将所需的级别顺序作为事件参数来设置自己的顺序

我用你的例子说明:

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

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

eventDat$event
是一个因素,因此R将
noProc
视为一个因素级别。在使用
sequecreate()
之后,删除所有出现的
noProc
是否足够?noProc是感兴趣的事件之一。事件在数据中按发生顺序排列,但是seqecreate()在创建事件序列对象时会重新排列事件谢谢您的回答,但是noProc并不总是最后一个事件,例如:seqDat[2]。我想我可以设定等级顺序,因为我有三个已知的终点。然而,例如,如果我没有对以I和T开头的事件进行编码,则很难设置级别,因为数据中的顺序不同,因此想法是为事件序列对象设置字母表(事件集)的顺序(即对所有序列有效)。然后,形成转换的事件将按照该顺序显示,无论顺序如何。将
noProc
设置为最后一个元素只是一个示例。您可以根据需要设置组成字母表的元素的顺序。只需定义所需的
ev.alph
向量。
ev.list <- levels(factor(eventDat$eventF))
ev.alph <- c(ev.list[ev.list!="noProc"],"noProc")
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)