根据任意两个为真的条件创建一个新变量

时间:2020-07-23 17:51:30

标签: r variables binary-data

我在R中有一个带有4个变量的数据框,并希望根据在这些变量上满足的任意2个条件创建一个新变量。 我试图通过if / else语句创建它,但是需要对每个变量条件为true进行排列。我还需要扩展到可以基于任意三个条件创建新变量的位置。我不确定是否有比使用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)

如果任何两个变量为真(例如== 1),我想创建一个新变量X5 根据上述数据框的新变量将产生X5(1,0,1,0)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
带有选项1的

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

答案 2 :(得分:0)

您可以使用:

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)