r - 如何将向量化事务转换为二进制矩阵事务
问题描述
我有一个只data.frame
调用transactions
一个字段的调用items
,这样第 i 行由一个向量组成,其中包含第 i 个事务的项目,它看起来像这样:
> head(transactions)
items
1 Cake, Fudge
2 Coffee, Tea
3 Coffee, Choco, Tea
4 Coffee
5 Bread, Muffin, Jam
6 Coffee
我想将其转换为二进制矩阵,这样每个元素都表示是否已为给定交易购买了给定对象,它应该如下所示:
Cake Fudge Coffee Tea Choco Bread Muffin Jam
1 1 1 0 0 0 0 0 0
2 0 0 1 1 0 0 0 0
3 0 0 1 1 1 0 0 0
4 0 0 1 0 0 0 0 0
5 0 0 0 0 0 1 1 1
6 0 0 1 0 0 0 0 0
如果没有阴暗的嵌套 for 循环,我找不到一种方法。这一切都是为了apriori
从arules
包裹中申请,如果你们中的任何人能帮我解决这个问题,将不胜感激。
谢谢!
解决方案
我们可以创建新列来对每一行 ( row
) 和我们想要在存在值 1 ( spread_value
) 的情况下表示的值进行分组。我们使用separate_rows
将每个逗号分隔的值拆分为单独的行。然后我们spread
将值从长到宽,如果没有值,我们fill
将其设为 0。
library(tidyverse)
df %>%
mutate(row = row_number(), spread_value = 1) %>%
separate_rows(items, sep = ",") %>%
mutate(items = trimws(items)) %>%
spread(items, spread_value, fill = 0) %>%
select(-row)
# Bread Cake Choco Coffee Fudge Jam Muffin Tea
#1 0 1 0 0 1 0 0 0
#2 0 0 0 1 0 0 0 1
#3 0 0 1 1 0 0 0 1
#4 0 0 0 1 0 0 0 0
#5 1 0 0 0 0 1 1 0
#6 0 0 0 1 0 0 0 0
推荐阅读
- javascript - 禁用按钮时添加警告
- c++ - 联合类型的模板特化
- laravel - 获取相关数据
- boto3 - AWS 凭证
- highcharts - 如何调整第一个类别名称在 xAxis 上的位置?
- azure - Azure 上的 ASP.Net Core APP 和 SQL - 转换数字时出现问题 - 代码在本地工作?
- python - 如何修复子进程。“CalledProcessError 命令返回非零退出状态 1”OpenedX?
- c++ - 隐藏不应在仅允许 const 访问的基类中改变的成员变量,以便可以保留赋值运算符
- amazon-web-services - AWS 无服务器 VPC 子网创建
- c# - 如何使用 LINQ 删除数组中定义的节点以外的节点