【问题标题】:Ifelse statements chain for creating a new column based on some conditions of other columns用于根据其他列的某些条件创建新列的 ifelse 语句链
【发布时间】:2019-09-04 12:53:48
【问题描述】:

我的参与者被问到一个问题 (cle1i2),可能的答案是是 (1) 或否 (0)。

其中回答“是”的人再次被问到另一个问题 (cle2i2),有“是”(1) 或“否”(0) 个可能的答案。

现在,在 R 中,我想创建一个新列 (cle7_P),其中的值取决于以下条件。

条件就是这些,应该一起执行;

  1. 如果 cle1i2 是 NA AND cle2i2 是 NA,那么 cle7_P 是 NA;

  2. 如果 cle1i2 为 0 AND cle2i2 为 NA,则 cle7_P 为 0;

  3. 如果 cle1i2 为 1 AND cle2i2 为 1,则 cle7_P 为 1;

  4. 如果 cle1i2 为 1 AND cle2i2 为 0,则 cle7_P 为 0;

  5. 如果 cle1i2 为 1 AND cle2i2 为 NA,则 cle7_P 为 NA;

这是我迄今为止尝试过的,但是当我手动检查数据时它不起作用。

library(dplyr)
library(tidyverse)

h$pcle7_P %>% 
  (ifelse(is.na( cle1i2) & is.na( cle2i2), 
       yes = NA, 
       no = ifelse( cle1i2 == 0 & is.na( cle2i2), 
          yes = 0, 
          no = ifelse( cle1i2 == 1 & cle2i2 == 1, 
              yes = 1, 
              no = ifelse( cle1i2 == 1 & cle2i2 == 0, 
                  yes = 0, 
                  no = ifelse( cle1i2 == 1 & is.na(cle2i2), 
                      NA))))))



h <- h %>%
  mutate( pcle7_P = ifelse(cle1i2 == NA | cle2i2 == NA, 
    yes = NA, 
    no = ifelse(cle1i2 == 0 | cle2i2 == NA, 
        yes =0, 
        no = ifelse(cle1i2 == 1 | cle2i2 == 1, 
            yes = 1, 
            no = ifelse(cle1i2 == 1 | cle2i2 == 0, 
                yes = 0, 
                no = ifelse(cle1i2 == 1 | cle2i2 == NA), 
                    NA)))))

我希望有一个新列,其中包含根据条件的值。

你能帮帮我吗?谢谢

【问题讨论】:

  • 请您提供一些示例数据和预期输出,例如dput(head(my_data))
  • 您的最后一个嵌套 ifelse 似乎缺少“非”条件?

标签: r dataframe if-statement


【解决方案1】:

您可以尝试case_when,它非常适合多个ifelse

library(tidyverse)
h %>% 
  mutate(pcle7_P = case_when(is.na(cle1i2) & is.na(cle2i2) ~ NA_real_,
                             cle1i2 == 0 ~ 0,
                             cle1i2 == 1 & cle2i2 == 1 ~ 1,
                             cle1i2 == 1 & cle2i2 == 0 ~ 0, 
                             cle1i2 == 1 & is.na(cle2i2) == 1 ~ NA_real_))

【讨论】:

    【解决方案2】:

    您的第二次尝试可能会奏效,但请记住

    > NA == NA
    [1] NA
    

    您需要像第一次尝试一样使用is.na(cle1i2)

    【讨论】:

      猜你喜欢
      • 2022-09-23
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 2020-09-14
      相关资源
      最近更新 更多