То, что я пытаюсь сделать, - создать единую переменную катаракты из трех разных наборов данных, которые задают вопрос о катаракте. (В основном, телефонное интервью, волна с использованием короткой анкеты и волна с использованием более длинного вопросника.) Эти наборы данных были объединены, так что отсутствуют значения, созданные для значений для участников волны, в которой они не участвовали Я закодировал каждый из трех отдельных пучков катаракты как 1 = ДА и 0 = НЕТ.Как объединить значения из трех переменных в одну переменную?
В следующем коде я пытаюсь сказать, если вы ответите yes (1) на любой из трех vars, тогда укажите значение 1, а затем, если вы No (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
Любые предложения о том, какую логическую вещь мне здесь не хватает?
Думаю, вам нужно уточнить критерии для «кошки». Если я правильно вас понимаю, вы пишете, что если _any_ из x, y, z равно 0, вы хотите установить «cat» в ноль. В то же время вы пишете, что если _any_ из x, y, z равно 1, вы хотите установить «cat» в единицу. Так, если, например, x = 0, y = 1, z = NA, то критерии для cat = 0 _ и_ cat = 1 выполняются. – Henrik
Да, извините за отсутствие ясности. Таким образом, три отдельные переменные задают одни и те же вопросы различным людям. Поэтому окончательный набор данных прилагается вместе.Переменная для первого обследования будет иметь недостающие значения для людей, представленных во втором и третьем опросах. Переменная для второго обследования будет иметь отсутствующие значения для первого и третьего опросов и т. Д. Конечно, есть вероятность, что все переменные будут иметь NA, и именно тогда человек не ответил на вопрос в своей волне. – user3314465