I have a data frame where each condition (in the example: hope, dream, joy) has 5 variables (in the example, coded with suffixes x, y, z, a, b - the are the same for each condition).
df <- data.frame(matrix(1:16,5,16))
names(df) <- c('ID','hopex','hopey','hopez','hopea','hopeb','dreamx','dreamy','dreamz','dreama','dreamb','joyx','joyy','joyz','joya','joyb')
df[1,2:6] <- NA
df[3:5,c(7,10,14)] <- NA
This is how the data looks like:
ID hopex hopey hopez hopea hopeb dreamx dreamy dreamz dreama dreamb joyx joyy joyz joya joyb
1  1    NA    NA    NA    NA    NA     15      4      9     14      3    8   13    2    7   12
2  2     7    12     1     6    11     16      5     10     15      4    9   14    3    8   13
3  3     8    13     2     7    12     NA      6     11     NA      5   10   15   NA    9   14
4  4     9    14     3     8    13     NA      7     12     NA      6   11   16   NA   10   15
5  5    10    15     4     9    14     NA      8     13     NA      7   12    1   NA   11   16
I want to create a new variable for each condition (hope, dream, joy) that codes whether all of the variables x...b for that condition are NA (0 if all are NA, 1 if any is non-NA). And I want the new variables to be stored in the data frame. Thus, the output should be this:
  ID hopex hopey hopez hopea hopeb dreamx dreamy dreamz dreama dreamb joyx joyy joyz joya joyb hope joy dream
1  1    NA    NA    NA    NA    NA     15      4      9     14      3    8   13    2    7   12    0   1     1
2  2     7    12     1     6    11     16      5     10     15      4    9   14    3    8   13    1   1     1
3  3     8    13     2     7    12     NA      6     11     NA      5   10   15   NA    9   14    1   1     1
4  4     9    14     3     8    13     NA      7     12     NA      6   11   16   NA   10   15    1   1     1
5  5    10    15     4     9    14     NA      8     13     NA      7   12    1   NA   11   16    1   1     1
The code below does it, but I'm looking for a more elegant solution (e.g., for a case where I have even more conditions). I've tried with various combinations of all(), select(), mutate(), but while they all seem useful, I cannot figure out how to combine them to get what I want. I'm stuck and would be interested in learning to code more efficiently. Thanks in advance!
df$hope <- 0
df[is.na(df$hopex) == FALSE | is.na(df$hopey) == FALSE | is.na(df$hopez) == FALSE | is.na(df$hopea) == FALSE | is.na(df$hopeb) == FALSE, "hope"] <- 1
df$dream <- 0
df[is.na(df$dreamx) == FALSE | is.na(df$dreamy) == FALSE | is.na(df$dreamz) == FALSE | is.na(df$dreama) == FALSE | is.na(df$dreamb) == FALSE, "dream"] <- 1
df$joy<- 0
df[is.na(df$joyx) == FALSE | is.na(df$joyy) == FALSE | is.na(df$joyz) == FALSE | is.na(df$joya) == FALSE | is.na(df$joyb) == FALSE, "joy"] <- 1
 
    