根据任何 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)
我在 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)