r - 将交易数据转化为稀疏矩阵
问题描述
我正在尝试遵循以下问题中的工作流程:Converting from regular format to sparse format for arules package。我有一些交易数据,我想把它变成一个可以输入arules
包的稀疏矩阵。已发布问题的解决方案不再有效。见下文:
ID <- c(1, 2, 2, 8, 8, 9, 10, 11)
Item <- c("Avas", "Alo", "Erbi", "Abra", "Ali", "Inj", "Avas", "Avas")
(test <- data.frame(ID, Item))
ID Item
1 Avas
2 Alo
2 Erbi
8 Abra
8 Ali
8 Inj
9 Inj
10 Avas
11 Avas
trans1 <- as(split(test[, "Item"], test[, "ID"]), "transactions")
Error in as(split(test[, "Item"], test[, "ID"]), "transactions") :
no method or default for coercing “list” to “transactions”
至少,我想将上述格式转换为以下格式(然后我可以arules
在后续步骤中将其转换为可读对象):
V1 V2 V3
1 Avas
2 Alo Erbi
8 Abra Ali Inj
9 Inj
10 Avas
11 Avas
解决方案
read.table(text=do.call(paste,aggregate(.~ID,test,paste,collapse = ' ')),fill=T,h=F)
V1 V2 V3 V4
1 1 Avas
2 2 Alo Erbi
3 8 Abra Ali Inj
4 9 Inj
5 10 Avas
6 11 Avas
您注意确保您的数据框只有字符。如果不是这种情况,请执行
test = rapply(test,as.character,'factors',how='replace')
你也可以这样做:
reshape(transform(test,time=ave(ID,ID,FUN=seq_along)),idvar = 'ID',dir='wide')
ID Item.1 Item.2 Item.3
1 1 Avas <NA> <NA>
2 2 Alo Erbi <NA>
4 8 Abra Ali Inj
7 9 Inj <NA> <NA>
8 10 Avas <NA> <NA>
9 11 Avas <NA> <NA>
推荐阅读
- visual-studio - Xamarin 表单与 Visual Studio 2017
- java - 中断等待过程android
- android - 日历提醒不适用于 OnePlus 设备
- javascript - AngularJs ng-repeat 跟踪 $index 问题与 angular-bootstrap-switch
- php - cURL PHP 标头和数据
- json - 核心数据 - NSManagedObject(有关系)到 JSON
- asp.net-mvc - MVC 文件上传 - 将路径和文件名保存回数据库
- angular - 如何在 JqxGrid 的单元格渲染器中使用 Angular 管道
- javascript - 从 React Context API 渲染函数中的地图函数渲染 HTML
- intellij-idea - Intellij 并行运行配置限制