use*_*074 2 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
Run Code Online (Sandbox Code Playgroud)
其中P1代表产品1,依此类推.
本质上,我想运行一个简单的查询,在其中我可以转换所有超过1到1的值.这样我的数据中只有1和0.我能够使用以下几行来完成它:
df[(df$P1>1] <- 1
Run Code Online (Sandbox Code Playgroud)
是否适用所有功能?
您可以转换为逻辑矩阵并通过换行强制转换为二进制+.
+(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
Run Code Online (Sandbox Code Playgroud)
或使用稍慢 ifelse
ifelse(df > 0, 1, 0)
Run Code Online (Sandbox Code Playgroud)
如果数据集非常大,那么创建matrix可能不是内存效率.我们可以转换为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
Run Code Online (Sandbox Code Playgroud)