我想要做的是从三个不同的数据集创建一个单一的白内障变量,询问有关白内障。 (基本上,电话采访,使用简短问卷的浪潮以及使用较长问卷的浪潮)。这些数据集已合并,因此缺少为他们未参与的wave参与者的值创建的值我已经将三个独立的白内障变量中的每一个编码为1 =是和0 =否。在下面的代码中,我想说如果你对三个变量中的任何一个做出回答(1),然后给出1的值,那么如果你是一个没有(0)的任何给出一个值为0,否则为“NA”。如何将三个变量的值组合成一个变量?
survey$cataract<-ifelse(survey$ew3_cat==1 | survey$lq3_catnum==1 | survey$sq3_cat==1,1,
ifelse(survey$ew3_cat==0 | survey$lq3_catnum==0 | survey$sq3_cat==0,0,NA))
从以下结果可以看出,我得到了1,但其他一切都是“NA”,没有零。
> table(survey$cataract,useNA="ifany")
1 <NA>
10303 63322
现在,如果我改变顺序,比如先做所有的零,然后我得到正确的0,但没有1。
survey$cataract<-ifelse(survey$ew3_cat==0 | survey$lq3_catnum==0 | survey$sq3_cat==0,0,
ifelse(survey$ew3_cat==1 | survey$lq3_catnum==1 | survey$sq3_cat==1,1,NA))
> table(survey$cataract,useNA="ifany")
0 <NA>
63315 10310
从三个独立的增值经销商正确的计数应该是:
10,303 = 1
63,315 = 0
7= NA
我也试图与编造数据复制此问题,如下:
x <- c(rep(1,100),rep(0,200),rep(NA,400))
y <- c(rep(NA,300),rep(1,100),rep(0,100),rep(NA,200))
z <- c(rep(NA,500),rep(1,100),rep(0,100))
cat <- ifelse(x==1|y==1|z==1,1,
ifelse(x==0|y==0|z==0,0,NA))
> table(cat,useNA="ifany")
cat
1 <NA>
300 400
如果我同样的问题颠倒顺序:
cat <- ifelse(x==0|y==0|z==0,0,
ifelse(x==1|y==1|z==1,1,NA))
> table(cat,useNA="ifany")
cat
0 <NA>
400 300
关于我在这里失踪的逻辑事物的任何建议?
我认为你需要澄清你的'猫'标准。如果我正确地理解了你,你写出如果x,y,z的_any_为0,那么你想将'cat'设置为零。同时你写道,如果x,y,z的_any_是1,那么你想设置'cat'为1。因此,例如,如果x = 0,y = 1,z = NA,则满足cat = 0和cat = 1的标准。 – Henrik
是的,抱歉,缺乏清晰度。所以,三个单独的变量向不同的人提出相同的问题。因此,最终的数据集被附加在一起。第一次调查的变量,第二次和第三次调查中的人员缺少值。第二次调查的变量将缺少第一次和第三次调查的值,依此类推。当然,所有变量都有NA的可能性也就是说,当一个人没有在他们的浪潮中回答问题时。 – user3314465