将条件应用于R中的多个列
我有一个数据集,它以虚拟变量的形式表示每个客户的一个篮子 例如:将条件应用于R中的多个列,r,market-basket-analysis,dummy-variable,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 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[(df$P1>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
这应该与您尝试的方法相同:
df[df > 0] <- 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
df[df>0]为什么不同时玩class
:
`class<-`(!!df, "numeric")
# 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
`class