Последовательность переупорядочивает события в алфавитном порядке - PullRequest
1 голос
/ 29 марта 2019

Я создаю последовательность событий, используя функцию seqecreate Traminer.Однако события, которые происходят в одно и то же время, упорядочиваются в алфавитном порядке в созданном объекте последовательности событий.

Данные упорядочены по последовательности происходящих событий, однако при создании объекта последовательности событий события, происходящие в одно и то же время, упорядочиваются в алфавитном порядке.

Я могу вручную комбинировать события, которые происходят в одно и то же время, но просто хотел спросить, как убедиться, что 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)

1 Ответ

1 голос
/ 02 апреля 2019

Если не фактор, аргумент event seqecreate преобразуется в фактор, упорядочивая уровни в алфавитном порядке по умолчанию. Вы можете установить свой собственный порядок, передав в качестве аргумента события самостоятельно определенный фактор с требуемым порядком уровня.

Проиллюстрирую на вашем примере:

Мы получаем текущий порядок уровней и устанавливаем событие 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)  
...