将条件应用于R中的多个列

时间:2015-09-30 14:22:02

标签: r market-basket-analysis dummy-variable

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

例如:

var requiredIndex = xDoc.Descendants("ns").ToList().FindIndex(x => x.Value == counter);

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

基本上,我想运行一个简单的查询,我可以将所有超过1的值转换为1.这样我的数据中只有1和0。我可以使用以下几行来完成:

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

是否有申请所有功能?

3 个答案:

答案 0 :(得分:6)

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

+(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)

如果数据集非常大,那么创建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

答案 1 :(得分:2)

这应该与您尝试的相同:

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

答案 2 :(得分:1)

为什么不玩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