【问题标题】:How to create new variables using loop and ifelse statement如何使用循环和 ifelse 语句创建新变量
【发布时间】:2019-12-03 02:00:36
【问题描述】:

我有许多同名但后缀不同的变量。例如,var1、var2、var3、var4、var5、var6、... 等等。这些变量中的每一个都有一个 0、1 和 2 的随机序列。使用这些变量,我试图创建一个名为 testvariable 的新变量。如果任何已经存在的变量有1,我将testvariable设置为1。如果它们有0或2,我将分配0。

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

编辑:这是给 R 的。

【问题讨论】:

  • 您没有说出您使用的语言或添加任何相关标签
  • 抱歉,我是通过帖子编辑的。

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


【解决方案1】:

我会为此使用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

【讨论】:

    【解决方案2】:

    如果我理解正确,如果 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
    

    【讨论】:

    • 如果丢失了怎么办??
    • 缺少什么?在哪里?请举例?
    猜你喜欢
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2013-03-22
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2021-02-09
    相关资源
    最近更新 更多