r - 将条件应用于 R 中的多列

标签 r market-basket-analysis dummy-variable

我有一个数据集,它以虚拟变量的形式代表每个客户的购物篮。

例如:

P1  P2  P3  P4  P5
0   2   0   0   0
0   1   0   0   0
0   0   0   3   0 
0   0   0   0   0
0   0   5   0   0
1   1   0   0   0

其中 P1 代表产品 1,依此类推。

本质上,我想运行一个简单的查询,在该查询中我可以将所有大于 1 的值转换为 1。这样我的数据中将只有 1 和 0。我能够使用以下方法完成几行:

df[(df$P1>1] <- 1

是否有应用所有功能?

最佳答案

您可以转换为逻辑矩阵并通过用 + 包装强制转换为二进制。

+(df > 0)
#     P1 P2 P3 P4 P5
#[1,]  0  1  0  0  0
#[2,]  0  1  0  0  0
#[3,]  0  0  0  1  0
#[4,]  0  0  0  0  0
#[5,]  0  0  1  0  0
#[6,]  1  1  0  0  0

或者使用稍慢的ifelse

ifelse(df > 0, 1, 0)

如果数据集真的很大,创建一个矩阵可能不会节省内存。我们可以转换为data.table(假设初始数据集为data.frame)并使用set将值更改为1

library(data.table)
setDT(df)
for(j in seq_along(df)){
  set(df, i= which(df[[j]] > 1), j=j, value=1)
 }

df
#   P1 P2 P3 P4 P5
#1:  0  1  0  0  0
#2:  0  1  0  0  0
#3:  0  0  0  1  0
#4:  0  0  0  0  0
#5:  0  0  1  0  0
#6:  1  1  0  0  0

关于r - 将条件应用于 R 中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32868583/

相关文章:

r - 根据限制将数字向量转换为二进制 (0/1)

r - 在两个不同长度的向量上应用函数,并在 R 中返回一个矩阵

r - 使用R中的arules包对重复交易进行关联分析

R多列之间的多热编码

r - 创建一个非正统的虚拟变量

r - R从面板上移除行,同时保持面板平衡

r - 如何查找商品及其组合的购买次数?

r - 市场篮分析 - 具有可变数量功能的单一模型?

r - 将一个字符串列拆分为几个虚拟变量

emacs - Rscript 有 Emacs 模式吗?