我在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)
答案 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)