Захват всех предметов в корзине (R/arulesSequences)

У меня возникла проблема с пакетом arulesSequences в R. Мне удалось прочитать корзины в программе и создать data.frame, однако он не распознает другие элементы, кроме первого столбца. Ниже приведен пример моего набора данных, который следует форме, показанной здесь: R/Sequence Mining/SPADE.

    [sequenceID] [eventID] [SIZE] items
    2 1 1 OB/Gyn
    15 1 1 Internal_Medicine
    15 2 1 Internal_Medicine
    15 3 1 Internal_Medicine
    56 1 2 Internal_Medicine Neurology
    84 1 1 Oncology
    151 1 2 Hematology Hematology
    151 2 1 Hematology/Oncology
    151 3 1 Hematology/Oncology
    185 1 2 Gastroenterology Gastroenterology

Набор данных был экспортирован из SAS в формате [.CSV], а затем преобразован в файл с разделителями табуляции [.TXT] в Excel. Заголовки были удалены для импорта в R, но я поместил их в скобки выше для ясности в этом примере. Все пробелы были заменены символом подчеркивания ("_"), а названия элементов максимально упрощены. Каждый элемент указан в отдельной колонке. Для импорта файла использовалась следующая команда:

    baskets <- read_baskets(con = "...filepath/spade.txt", sep = "[ \t]+",info=c("sequenceID", "eventID", "SIZE"))

У меня нет ошибок, поэтому я продолжаю следующую команду:

    as(baskets, "data.frame")

Здесь он возвращает data.frame в соответствии с запросом, однако ему не удается захватить элементы за пределами первого столбца:

    items sequenceID eventID SIZE
    {OB/Gyn} 2 1 1
    {Internal_Medicine} 15 1 1
    {Internal_Medicine} 15 2 1
    {Internal_Medicine} 15 3 1
    {Internal_Medicine} 56 1 2
    {Oncology} 84 1 1
    {Hematology} 151 1 2
    {Hematology/Oncology} 151 2 1
    {Hematology/Oncology} 151 3 1
    {Gastroenterology} 185 1 2

Строка 5 должна выглядеть так:

    {Internal_Medicine, Neurology} 56 1 2

Я попытался импортировать файл напрямую как [.CSV], но формат data.frame аналогичен моей предыдущей попытке с использованием вкладок, за исключением того, что перед первым элементом ставится запятая:

    {,Internal_Medicine} 56 1 2

Мы будем очень признательны за любые предложения по устранению неполадок. Кажется, что этот пакет придирчив, когда дело доходит до форматирования.


person diaferiaj    schedule 22.05.2017    source источник


Ответы (1)


Строка 5 должна выглядеть так:

{Internal_Medicine, Neurology} 56 1 2

Проверить

library(arulesSequences)
packageVersion("arulesSequences")
# [1] ‘0.2.16’
packageVersion("arules")
# [1] ‘1.5.0’
txt <- readLines(n=10)
2 1 1 OB/Gyn
15 1 1 Internal_Medicine
15 2 1 Internal_Medicine
15 3 1 Internal_Medicine
56 1 2 Internal_Medicine Neurology
84 1 1 Oncology
151 1 2 Hematology Hematology
151 2 1 Hematology/Oncology
151 3 1 Hematology/Oncology
185 1 2 Gastroenterology Gastroenterology
writeLines(txt, tf<-tempfile())
baskets <- read_baskets(con = tf, sep = "[ \t]+",info=c("sequenceID", "eventID", "SIZE"))
as(baskets, "data.frame")
#                            items sequenceID eventID SIZE
# 1                       {OB/Gyn}          2       1    1
# 2            {Internal_Medicine}         15       1    1
# 3            {Internal_Medicine}         15       2    1
# 4            {Internal_Medicine}         15       3    1
# 5  {Internal_Medicine,Neurology}         56       1    2 # <----------
# 6                     {Oncology}         84       1    1
# 7                   {Hematology}        151       1    2
# 8          {Hematology/Oncology}        151       2    1
# 9          {Hematology/Oncology}        151       3    1
# 10            {Gastroenterology}        185       1    2
person lukeA    schedule 22.05.2017
comment
этот метод, кажется, не работает для меня. Если я импортирую файл [.CSV], используйте вашу первую строку кода writeLines(file, file_tf <-tempfile()), я получаю сообщение об ошибке - person diaferiaj; 23.05.2017
comment
@diaferiaj Почему вы импортируете его, а затем снова экспортируете с помощью writeLines? - person lukeA; 23.05.2017
comment
Разве это не то, что вы делаете с командой readLines, за которой следует writeLines? В противном случае ваш код выглядит точно так же, как мой. Похоже, что в моем случае пакет останавливается на первом элементе или не распознает, что переменная SIZE должна указывать, сколько столбцов нужно захватить. - person diaferiaj; 23.05.2017
comment
@diaferiaj readLines + writeLines просто воссоздает ваш CSV. Да, код похож на ваш. Я намеренно добавил версии пакетов для сравнения. Кроме этого: возможно, отсутствует строка заголовка в csv (у меня ее нет)? Возможно, ваш csv использует другие разделители, которые вы не учли? Невозможно решить, не имея ваших данных и информации о сеансе. - person lukeA; 23.05.2017
comment
Я понимаю, и подумал, что может быть трудно определить проблему. arules — это та же версия, а arulesSequences — «0.2.17». Обе мои версии csv и txt не имеют заголовков, и они должны быть разделены запятыми и разделителями табуляции соответственно. Я ценю ваше внимание. Мне придется продолжать играть с настройками и форматами. - person diaferiaj; 23.05.2017
comment
Похоже, ошибка возникла из-за форматирования элемента. Я создал ключ, переводивший каждый элемент в аббревиатуру, и повторно запустил код. Результаты имитировали ссылку, которую я разместил: {IM, NEURO} 56 1 2 - person diaferiaj; 24.05.2017