Загружать частые подпоследовательности из TXT

Можно ли загрузить список частых подпоследовательностей из файла .txt и заставить TraMineR распознавать его как объект последовательности?

К сожалению, у меня нет необработанных данных, поэтому я не могу воссоздать анализ. Единственный файл, который у меня есть, - это файл .txt, содержащий частые подпоследовательности. Я предполагаю, что он был создан с помощью функции seqefsub() из пакета TraMineR с maxGap=2, потому что данные выглядят как выходные данные упомянутой функции.

read.table() читает его как фрейм данных, но насколько я понял, TraMineR обрабатывает последовательности событий как списки со многими дополнительными атрибутами, которые, например, не содержатся в этом файле. Или я не знаю, как их извлечь ...

Вот так выглядит пара строк из файла .txt:

                                             Subsequence    Support  Count
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

person Balazs Dukai    schedule 12.04.2015    source источник
comment
Почему вы хотите сохранить распечатку результата seqefsub как текст, а затем прочитать его как объект последовательности? Функция seqefsub уже возвращает объект последовательности событий. Вы хотите преобразовать объект последовательности событий в объект последовательности состояний? (если да, см. [stackoverflow.com/a/28968342/1586731]). Уточните пожалуйста свой вопрос.   -  person Gilbert    schedule 15.04.2015
comment
@Gilbert - Я отредактировал свой вопрос, надеюсь, теперь он стал более ясным.   -  person Balazs Dukai    schedule 16.04.2015


Ответы (1)


Чтобы создать объект последовательности событий из (текстовых) подпоследовательностей, вы должны преобразовать их в вертикальную форму события с отметкой времени (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

Затем мы извлекаем данные TSE из s.df и создаем из них объект последовательности событий с помощью seqecreate. Наконец, мы присваиваем счетчикам веса последовательности.

s.tse <- subseq.to.TSE(s.df)
seqe <- seqecreate(s.tse)
seqeweight(seqe) <- s.df[,"Count"] 

Теперь вы можете, например, построить последовательность событий с помощью

seqpcplot(seqe)
person Gilbert    schedule 21.04.2015