Ошибка может привести к списку с атомарными компонентами только при преобразовании в правила транзакций

У меня есть кадр данных, и он выглядит так:

str(df)

'data.frame':   174671 obs. of  3 variables:
 $ COD_PRODUCT: Factor w/ 338 levels "001CH","002CO",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ STORE      : Factor w/ 15 levels "Barcelona","Florencia",..: 4 13 4 5 11 12 5 13 1 12 ...
 $ SELL_ID    : Factor w/ 74327 levels "BA0000000","BA0000001",..: 28696 65976 27147 14291 51141 59023 12249 61636 5495 59314 ...

Как мы видим здесь, в этих факторах нет ни NA, ни недопустимых значений:

print(unlist(lapply(df, function(x) any(is.na(x)))))
COD_PRODUCT       STORE     SELL_ID 
      FALSE       FALSE       FALSE 

Моя цель — создать модель интеллектуального анализа данных (правила ассоциации), и для этого я ранее успешно импортировал пакет arules. Следующим шагом, который я выполнил, было разбить мой df на список и применить операцию для устранения повторяющихся вхождений, например:

ppvt <- split(x = df[, c("COD_PRODUCT", "STORE")], f = df$SELL_ID)
ppvt <- lapply (ppvt, unique)

Пока все работает нормально. Однако, когда я попытался преобразовать в транзакции:

ppvt <- as (ppvt,  "transactions" )

Я получаю сообщение об ошибке:

 Error in asMethod(object) : can coerce list with atomic components only

Совершенно ничего об этом не знаю (и да, как вы можете себе представить, я много искал в Интернете, прежде чем прийти сюда). У вас есть идея, как ее решить?

Любая помощь будет действительно оценена.

С уважением,


person Fernando Barbeiro    schedule 04.06.2018    source источник
comment
Можете ли вы предоставить воспроизводимый пример проблемы (т. е. с кодом и данными, которые мы можем загрузить и запустить)?   -  person Lyngbakr    schedule 05.06.2018
comment
Посмотрите на str(ppvt), и вы увидите, что каждый элемент списка является фреймом данных. Чтобы преобразовать в транзакции, вам нужно, чтобы каждый элемент списка был вектором.   -  person Esther    schedule 05.06.2018
comment
Привет @Эстер, я думаю, ты прав. Если вы хотите предоставить ответ ниже, я отмечу его как правильный, отдав вам кредиты :) Спасибо за сотрудничество.   -  person Fernando Barbeiro    schedule 05.06.2018


Ответы (1)


Можете ли вы проверить класс (ppvt) перед вашим:

ппвт ‹- as (ппвт, «транзакции»).

Он должен вернуть data.frame для вашего:

ппвт ‹- as (ппвт, «транзакции»)

работать.

Я работал с dplyr и столкнулся с похожей проблемой. Преобразование таблицы в data.frame с помощью as.data.frame() решило проблему.

person nashank79    schedule 30.04.2019