如何使用循环和ifelse语句创建新变量

时间:2019-07-24 20:45:56

标签: r for-loop variables if-statement rstudio

我有许多名称相同但后缀不同的变量。例如,var1,var2,var3,var4,var5,var6 ...等。这些变量中的每一个都有0、1、2的随机序列。我正在尝试使用这些变量创建一个称为“ testvariable”的新变量。如果任何一个已经存在的变量具有1,我将给“ testvariable” 1。如果它们具有0或2,我将赋0。

是否可以使用一个简单的循环和/或ifelse语句来创建此变量?我的真实数据要比这复杂得多,所以我不想复制并粘贴每个单独的变量和值。

编辑:这是针对R。

2 个答案:

答案 0 :(得分:0)

为此,我将使用mgetmget给出变量列表。然后,您可以使用sapply检查列表中的每个元素,并使用any合并结果。最后,我利用了0和1的编码,但是您也可以使用if语句。

var1 <- c(0,0,1,2)
var2 <- c(2,2,2,2)
var3 <- c(0,2,0,2)
var4 <- c(0,2,2,2)

any(sapply(mget(paste0("var", 1:4)), function(x) 1 %in% x)) * 1
#> [1] 1

any(sapply(mget(paste0("var", 2:4)), function(x) 1 %in% x)) * 1
#> [1] 0

答案 1 :(得分:0)

如果我对您的理解正确,如果任何变量(例如var1,var2,..等)的值均为1,则testvariable必须为1,否则为0,然后执行:

样本df:

  var1 var2 var3 var4 var5
1    1    1    1    1    1
2    2    2    2    2    2
3    0    1    0    1    0
4    0    0    0    0    1
5    1    1    2    1    2
6    2    2    2    2    2
7    2    2    1    2    2
8    1    1    2    1    1
9    0    0    0    0    0

代码:

df$testvariable <- ifelse(rowSums(df[, grepl("var", names(df))] == 1) > 0, 1, 0)

输出:

  var1 var2 var3 var4 var5 testvariable
1    1    1    1    1    1            1
2    2    2    2    2    2            0
3    0    1    0    1    0            1
4    0    0    0    0    1            1
5    1    1    2    1    2            1
6    2    2    2    2    2            0
7    2    2    1    2    2            1
8    1    1    2    1    1            1
9    0    0    0    0    0            0