根据任何 2 个条件为真创建一个新变量

Create a new variable based on any 2 conditions being true

我在 R 中有一个包含 4 个变量的数据框,我想根据这些变量的任何 2 个条件成立来创建一个新变量。 我试图通过 if/else 语句创建它,但是需要每个变量条件的排列为真。我还需要扩展到可以根据任何 3 个条件为真来创建新变量的位置。我不确定是否有比使用 if/else 语句更有效的方法?

我的例子: 我有一个带有以下列变量的数据框 X

x1 = c(1,0,1,0)
X2 = c(0,0,0,0)
X3 = c(1,1,0,0)
X4 = c(0,0,1,0)

如果有任何 2 个变量为真(例如 ==1),我想创建一个新变量 X5 基于上述数据帧的新变量将产生 X5 (1,0,1,0)

你可以试试这个:

#Data
df <- data.frame(x1,X2,X3,X4)
#Code
df$X5 <- ifelse(rowSums(df,na.rm=T)==2,1,0)

  x1 X2 X3 X4 X5
1  1  0  1  0  1
2  0  0  1  0  0
3  1  0  0  1  1
4  0  0  0  0  0

这可以使用 apply 函数轻松完成:

x1 = c(1,0,1,0)
x2 = c(0,0,0,0)
x3 = c(1,1,0,0)
x4 = c(0,0,1,0)

df <- data.frame(x1,x2,x3,x4)

df$x5 <- apply(df,1,function(row) ifelse(sum(row != 0) == 2, 1, 0))

  x1 x2 x3 x4 X5
1  1  0  1  0  1
2  0  0  1  0  0
3  1  0  0  1  1
4  0  0  0  0  0

apply 选项 1 表示:对每一行执行此功能。要将其扩展到 3...N 个真实值,只需更改 ifelse 语句中的数字即可。

您可以使用:

df$X5 <- 1*(apply(df == 1, 1, sum)  == 2)

df$X5 <- 1*(mapply(sum, df) == 2)

输出

> df
X1 X2 X3 X4 X5
1  0  1  0  1
0  0  1  0  0
1  0  0  1  1
0  0  0  0  0

数据

df <- data.frame(X1,X2,X3,X4)