【问题标题】:Nested if-else statement, only the first criteria is being tested嵌套 if-else 语句,只测试第一个条件
【发布时间】:2020-01-28 00:45:56
【问题描述】:

我有一个数据集“cipe”,并且正在尝试创建一个新变量“case”,如果以下任何标准“htn”、“sle”、“apls”、“diabetes”、“ckd”是遇到了

我使用的代码是:

cipe <- mutate(cipe, case == ifelse(htn == 1, "1",
                                ifelse(sle == 1, "1",
                                       ifelse(apls == 1, "1",
                                              ifelse(diabetes == 1, "1",
                                                     ifelse(ckd == 1, "1", "0"))))))

我的数据集有大约 84 万个观察值,因此发布是不可行的,但是当我运行此代码时,新“case”变量中“1”的数量正好等于“”中“1”的数量htn",(应该更高),所以其他测试没有被评估。任何帮助都会很棒。谢谢

【问题讨论】:

  • 您需要df$case &lt;- rowSums(cipe[c('htn', 'sle', 'apls', 'diabetes', 'ckd')]) 吗?
  • 你真的在使用case == ifelse(…吗?这应该是case = ifelse(,否则会出错,除非你已经在某处定义了case。除此之外,该功能看起来应该按预期工作。您可以使用dput(dplyr::sample_n(cipe,15)) 提供一个简单的示例或您的数据

标签: r if-statement dplyr statistics


【解决方案1】:

我们可以对数据集'cipe'的列进行子集化,通过与1比较创建一个逻辑矩阵,使用rowSums检查它是否大于0,使用+as.integer将逻辑转换为二进制

+(rowSums(cipe[c('sle', 'apls', 'diabetes', 'ckd')] == 1) > 0)

或者另一个选项是Reduce|

+(Reduce(`|`, lapply(cipe[c('sle', 'apls', 'diabetes', 'ckd')], `==`, 1)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多