我的参与者被问到一个问题(cle1i2),并可能回答是(1)或否(0)。
其中,谁回答是,再次被问到另一个问题(cle2i2),是(1)或否(0)可能的答案。
现在,在R中,我想创建一个新列(cle7_P),其中的值取决于以下条件。
这些条件就是这些条件,应该一起实施;
到目前为止,这是我尝试过的,但是当我手动检查数据时,它不起作用。
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)))))我期望有一个新的列,它的值将根据条件而定。
你能帮帮我吗?谢谢
发布于 2019-09-04 13:04:31
您可以尝试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_))发布于 2019-09-04 13:07:25
你的第二次尝试可能会成功,但请记住
> NA == NA
[1] NA您需要像第一次尝试时那样使用is.na(cle1i2)。
https://stackoverflow.com/questions/57788850
复制相似问题