我的参与者被问到一个问题(cle1i2),可能的答案是(1)或否(0)。
在这些回答为“是”的人中,再次被问到另一个问题(cle2i2),可能的答案是(1)或否(0)。
现在,在R中,我想创建一个新列(cle7_P),其中的值取决于以下条件。
条件就是这些条件,应该一起执行;
如果cle1i2是NA而cle2i2是NA,那么cle7_P是NA;
如果cle1i2为0且cle2i2为NA,则cle7_P为0;
如果cle1i2为1且cle2i2为1,则cle7_P为1;
如果cle1i2为1且cle2i2为0,则cle7_P为0;
如果cle1i2为1且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)))))
我希望有一个新列具有根据条件的值。
你能帮我吗?谢谢
答案 0 :(得分:2)
您可以尝试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_))
答案 1 :(得分:0)
您的第二次尝试可能有效,但请记住
> NA == NA
[1] NA
您需要像第一次尝试一样使用is.na(cle1i2)
。