sequecreate按字母顺序重新排列事件
我正在使用Traminer sequecreate函数创建事件序列。但是,同时发生的事件将在事件序列对象中按字母顺序重新排序 数据按发生事件的顺序排序,但在创建事件序列对象时,同时发生的事件按字母顺序重新排序 我可以手动组合同时发生的事件,但我只想问一下如何确保SekeCreate不会对事件重新排序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
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)