I am working in R
Edit: hoping for a dplyr suggestion
sample data:
df <- data.frame(col1 = c(TRUE, TRUE, NA, NA),
col2 = c(FALSE, TRUE, FALSE, NA),
col3 = c(NA, TRUE, NA, TRUE))
print(df)
col1 | col2 | col3 |
---|---|---|
TRUE | FALSE | NA |
TRUE | TRUE | TRUE |
NA | FALSE | NA |
NA | NA | TRUE |
Desired outcome
I would like a way of assessing whether col1 --> col3 are all TRUE, ignoring the NAs.
col1 | col2 | col3 | assessment |
---|---|---|---|
TRUE | FALSE | NA | FALSE |
TRUE | TRUE | TRUE | TRUE |
NA | FALSE | NA | FALSE |
NA | NA | TRUE | TRUE |
With dplyr
either using rowwise
df %>%
rowwise() %>%
mutate(assessment = all(across(everything()), na.rm=T)) %>%
ungroup()
# A tibble: 4 × 4
col1 col2 col3 assessment
<lgl> <lgl> <lgl> <lgl>
1 TRUE FALSE NA FALSE
2 TRUE TRUE TRUE TRUE
3 NA FALSE NA FALSE
4 NA NA TRUE TRUE
or using pick
, thanks @r2evans
mutate(df, assessment = apply(pick(col1:col3), 1, \(x) all(x, na.rm = TRUE)))
col1 col2 col3 assessment
1 TRUE FALSE NA FALSE
2 TRUE TRUE TRUE TRUE
3 NA FALSE NA FALSE
4 NA NA TRUE TRUE
With base R, using all
cbind(df, assessment = apply(df, 1, \(x) all(x, na.rm=T)))
col1 col2 col3 assessment
1 TRUE FALSE NA FALSE
2 TRUE TRUE TRUE TRUE
3 NA FALSE NA FALSE
4 NA NA TRUE TRUE