我有许多名称相同但后缀不同的变量。例如,var1,var2,var3,var4,var5,var6 ...等。这些变量中的每一个都有0、1、2的随机序列。我正在尝试使用这些变量创建一个称为“ testvariable”的新变量。如果任何一个已经存在的变量具有1,我将给“ testvariable” 1。如果它们具有0或2,我将赋0。
是否可以使用一个简单的循环和/或ifelse语句来创建此变量?我的真实数据要比这复杂得多,所以我不想复制并粘贴每个单独的变量和值。
编辑:这是针对R。
答案 0 :(得分:0)
为此,我将使用mget
。 mget
给出变量列表。然后,您可以使用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