если еще с отсутствующими наблюдениями в R - PullRequest
1 голос
/ 16 апреля 2019

Допустим, у меня есть следующие 2 переменные

z1=c(0,1,1,0,NA,1,0,NA ,1)
z2=c(0,1,0,NA,1,0,0,0,NA)

Таким образом, в обеих переменных отсутствуют значения.Мне нужно создать новую переменную Z следующим образом:

Z = 1, если хотя бы одна из переменных (z1 и z2) равна 1. (в следующих ситуациях z1 = 1 & z2 = 1, z1 =0 & z2 = 1, z1 = 1 & z2 = 0, z1 = 1 & z2 = NA, z1 = NA & z2 = 1)

Z = 0, если хотя бы одна из переменных (z1 и z2) равны 0. (в следующих ситуациях z1 = 0 & z2 = 0, z1 = 0 & z2 = NA, z1 = NA & z2 = 0)

Итак, я выполнил следующее вложенное выражение ifelse и получил этоoutput,

     ifelse(z1==1|z2==1,1,ifelse((z1==0|z2==0),0 ,0))
  0  1  1 NA  1  1  0 NA  1

, кажется, что-то не так с моим утверждением if-else, поскольку мой идеальный вывод должен быть примерно таким,

0  1  1 0  1  1  0 0  1

может любой помочь мне разобратьсячто не так в моем коде?

Спасибо

Ответы [ 2 ]

3 голосов
/ 16 апреля 2019

Мы можем использовать pmax с na.rm как TRUE

pmax(z1, z2, na.rm = TRUE)
#[1] 0 1 1 0 1 1 0 0 1
1 голос
/ 16 апреля 2019

Я полагаю, coalesce() в пакетах dplyr достигнет желаемого результата:

library(dplyr)

coalesce(z1, z2)
[1] 0 1 1 0 1 1 0 0 1

Если вы хотите добавить новые значения к вашим предыдущим:

df <- tibble(
  z1 = c(0, 1, 1, 0, NA, 1, 0, NA, 1),
  z2 = c(0, 1, 0, NA, 1, 0, 0, 0, NA)
)

df %>% 
  mutate(z3 = coalesce(z1, z2))

# A tibble: 9 x 3
     z1    z2    z3
  <dbl> <dbl> <dbl>
1     0     0     0
2     1     1     1
3     1     0     1
4     0    NA     0
5    NA     1     1
6     1     0     1
7     0     0     0
8    NA     0     0
9     1    NA     1
...