Mutate error not clear

I cannot understand the error in mutate.

pacman::p_load(rio, 
               here, 
               tidyverse, 
               skimr,
               plyr,
               janitor,
               lubridate,
               gtsummary, 
               flextable,
               officer,
               epikit, 
               apyramid, 
               scales,
               datapasta, 
               reprex)


copdata <- data.frame(
  diarrhoea = c(TRUE,NA,NA,NA,TRUE,TRUE,NA,
                FALSE,TRUE,NA),
  bloody = c(FALSE,NA,NA,NA,FALSE,FALSE,NA,
             FALSE,NA,NA),
  vomiting = c(FALSE,NA,NA,NA,FALSE,FALSE,NA,
               FALSE,NA,NA)
)


copdata <- copdata %>% 
  mutate(gastrosymptoms = case_when(
    # Those had diarrhoea...
    diarrhoea == TRUE,
      #or bloody diarrhoea...
      bloody == TRUE |
      # or vomiting, are marked as TRUE (fell ill after the meal)
      vomiting == TRUE ~ TRUE,
    # The rest are FALSE. This includes those who ate a meal but had no symptoms (did not fell ill after the meal)
    .default = FALSE)
  )
#> Error in `mutate()`:
#> β„Ή In argument: `gastrosymptoms = case_when(...)`.
#> Caused by error in `case_when()`:
#> ! Case 1 (`diarrhoea == TRUE`) must be a two-sided formula, not a
#>   logical vector.
#> Backtrace:
#>      β–†
#>   1. β”œβ”€copdata %>% ...
#>   2. β”œβ”€dplyr::mutate(...)
#>   3. β”œβ”€dplyr:::mutate.data.frame(...)
#>   4. β”‚ └─dplyr:::mutate_cols(.data, dplyr_quosures(...), by)
#>   5. β”‚   β”œβ”€base::withCallingHandlers(...)
#>   6. β”‚   └─dplyr:::mutate_col(dots[[i]], data, mask, new_columns)
#>   7. β”‚     └─mask$eval_all_mutate(quo)
#>   8. β”‚       └─dplyr (local) eval()
#>   9. └─dplyr::case_when(...)
#>  10.   └─dplyr:::case_formula_evaluate(...)
#>  11.     └─dplyr:::map2(...)
#>  12.       └─base::mapply(.f, .x, .y, MoreArgs = list(...), SIMPLIFY = FALSE)
#>  13.         └─dplyr (local) `<fn>`(dots[[1L]][[1L]], dots[[2L]][[1L]])
#>  14.           └─dplyr:::validate_and_split_formula(...)
#>  15.             └─rlang::abort(message, call = error_call)

Created on 2023-10-12 with reprex v2.0.2

Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.2.2 (2022-10-31 ucrt)
#>  os       Windows 10 x64 (build 19045)
#>  system   x86_64, mingw32
#>  ui       RTerm
#>  language (EN)
#>  collate  English_United Kingdom.utf8
#>  ctype    English_United Kingdom.utf8
#>  tz       Europe/Prague
#>  date     2023-10-12
#>  pandoc   2.18 @ C:/Program Files/RStudio/bin/quarto/bin/tools/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package           * version date (UTC) lib source
#>  apyramid          * 0.1.3   2023-06-04 [1] Github (R4EPI/apyramid@cb14503)
#>  askpass             1.1     2019-01-13 [1] CRAN (R 4.2.2)
#>  base64enc           0.1-3   2015-07-28 [1] CRAN (R 4.2.0)
#>  broom.helpers       1.13.0  2023-03-28 [1] CRAN (R 4.2.3)
#>  cellranger          1.1.0   2016-07-27 [1] CRAN (R 4.2.2)
#>  class               7.3-22  2023-05-03 [1] CRAN (R 4.2.3)
#>  classInt            0.4-9   2023-02-28 [1] CRAN (R 4.2.3)
#>  cli                 3.6.1   2023-03-23 [1] CRAN (R 4.2.3)
#>  colorspace          2.1-0   2023-01-23 [1] CRAN (R 4.2.3)
#>  crayon              1.5.2   2022-09-29 [1] CRAN (R 4.2.2)
#>  crul                1.4.0   2023-05-17 [1] CRAN (R 4.2.3)
#>  curl                5.0.0   2023-01-12 [1] CRAN (R 4.2.3)
#>  data.table          1.14.8  2023-02-17 [1] CRAN (R 4.2.3)
#>  datapasta         * 3.1.0   2020-01-17 [1] CRAN (R 4.2.3)
#>  DBI                 1.1.3   2022-06-18 [1] CRAN (R 4.2.2)
#>  digest              0.6.31  2022-12-11 [1] CRAN (R 4.2.3)
#>  dplyr             * 1.1.2   2023-04-20 [1] CRAN (R 4.2.3)
#>  e1071               1.7-13  2023-02-01 [1] CRAN (R 4.2.3)
#>  ellipsis            0.3.2   2021-04-29 [1] CRAN (R 4.2.2)
#>  epikit            * 0.1.5   2023-02-15 [1] CRAN (R 4.2.3)
#>  evaluate            0.21    2023-05-05 [1] CRAN (R 4.2.3)
#>  fansi               1.0.4   2023-01-22 [1] CRAN (R 4.2.3)
#>  fastmap             1.1.1   2023-02-24 [1] CRAN (R 4.2.3)
#>  flextable         * 0.9.1   2023-04-02 [1] CRAN (R 4.2.3)
#>  fontBitstreamVera   0.1.1   2017-02-01 [1] CRAN (R 4.2.0)
#>  fontLiberation      0.1.0   2016-10-15 [1] CRAN (R 4.2.0)
#>  fontquiver          0.2.1   2017-02-01 [1] CRAN (R 4.2.3)
#>  forcats           * 1.0.0   2023-01-29 [1] CRAN (R 4.2.3)
#>  foreign             0.8-84  2022-12-06 [1] CRAN (R 4.2.2)
#>  fs                  1.6.2   2023-04-25 [1] CRAN (R 4.2.3)
#>  gdtools             0.3.3   2023-03-27 [1] CRAN (R 4.2.3)
#>  generics            0.1.3   2022-07-05 [1] CRAN (R 4.2.2)
#>  gfonts              0.2.0   2023-01-08 [1] CRAN (R 4.2.3)
#>  ggplot2           * 3.4.2   2023-04-03 [1] CRAN (R 4.2.3)
#>  glue                1.6.2   2022-02-24 [1] CRAN (R 4.2.2)
#>  gt                  0.9.0   2023-03-31 [1] CRAN (R 4.2.3)
#>  gtable              0.3.3   2023-03-21 [1] CRAN (R 4.2.3)
#>  gtsummary         * 1.7.1   2023-04-27 [1] CRAN (R 4.2.3)
#>  haven               2.5.2   2023-02-28 [1] CRAN (R 4.2.3)
#>  here              * 1.0.1   2020-12-13 [1] CRAN (R 4.2.2)
#>  hms                 1.1.3   2023-03-21 [1] CRAN (R 4.2.3)
#>  htmltools           0.5.5   2023-03-23 [1] CRAN (R 4.2.3)
#>  httpcode            0.3.0   2020-04-10 [1] CRAN (R 4.2.3)
#>  httpuv              1.6.11  2023-05-11 [1] CRAN (R 4.2.3)
#>  janitor           * 2.2.0   2023-02-02 [1] CRAN (R 4.2.3)
#>  jsonlite            1.8.4   2022-12-06 [1] CRAN (R 4.2.3)
#>  KernSmooth          2.23-21 2023-05-03 [1] CRAN (R 4.2.3)
#>  knitr               1.43    2023-05-25 [1] CRAN (R 4.2.3)
#>  later               1.3.1   2023-05-02 [1] CRAN (R 4.2.3)
#>  lifecycle           1.0.3   2022-10-07 [1] CRAN (R 4.2.2)
#>  lubridate         * 1.9.2   2023-02-10 [1] CRAN (R 4.2.3)
#>  magrittr            2.0.3   2022-03-30 [1] CRAN (R 4.2.2)
#>  mime                0.12    2021-09-28 [1] CRAN (R 4.2.0)
#>  munsell             0.5.0   2018-06-12 [1] CRAN (R 4.2.2)
#>  officer           * 0.6.2   2023-03-28 [1] CRAN (R 4.2.3)
#>  openssl             2.0.6   2023-03-09 [1] CRAN (R 4.2.3)
#>  openxlsx            4.2.5.2 2023-02-06 [1] CRAN (R 4.2.3)
#>  pacman              0.5.1   2019-03-11 [1] CRAN (R 4.2.3)
#>  pillar              1.9.0   2023-03-22 [1] CRAN (R 4.2.3)
#>  pkgconfig           2.0.3   2019-09-22 [1] CRAN (R 4.2.2)
#>  plyr              * 1.8.8   2022-11-11 [1] CRAN (R 4.2.2)
#>  promises            1.2.0.1 2021-02-11 [1] CRAN (R 4.2.2)
#>  proxy               0.4-27  2022-06-09 [1] CRAN (R 4.2.2)
#>  purrr             * 1.0.1   2023-01-10 [1] CRAN (R 4.2.3)
#>  R6                  2.5.1   2021-08-19 [1] CRAN (R 4.2.2)
#>  ragg                1.2.5   2023-01-12 [1] CRAN (R 4.2.3)
#>  Rcpp                1.0.10  2023-01-22 [1] CRAN (R 4.2.3)
#>  readr             * 2.1.4   2023-02-10 [1] CRAN (R 4.2.3)
#>  readxl              1.4.2   2023-02-09 [1] CRAN (R 4.2.3)
#>  repr                1.1.6   2023-01-26 [1] CRAN (R 4.2.3)
#>  reprex            * 2.0.2   2022-08-17 [1] CRAN (R 4.2.2)
#>  rio               * 0.5.29  2021-11-22 [1] CRAN (R 4.2.2)
#>  rlang               1.1.1   2023-04-28 [1] CRAN (R 4.2.3)
#>  rmarkdown           2.22    2023-06-01 [1] CRAN (R 4.2.3)
#>  rprojroot           2.0.3   2022-04-02 [1] CRAN (R 4.2.2)
#>  rstudioapi          0.14    2022-08-22 [1] CRAN (R 4.2.2)
#>  scales            * 1.2.1   2022-08-20 [1] CRAN (R 4.2.2)
#>  sessioninfo         1.2.2   2021-12-06 [1] CRAN (R 4.2.3)
#>  sf                  1.0-13  2023-05-24 [1] CRAN (R 4.2.3)
#>  shiny               1.7.4   2022-12-15 [1] CRAN (R 4.2.3)
#>  skimr             * 2.1.5   2022-12-23 [1] CRAN (R 4.2.3)
#>  snakecase           0.11.0  2019-05-25 [1] CRAN (R 4.2.2)
#>  stringi             1.7.12  2023-01-11 [1] CRAN (R 4.2.2)
#>  stringr           * 1.5.0   2022-12-02 [1] CRAN (R 4.2.3)
#>  systemfonts         1.0.4   2022-02-11 [1] CRAN (R 4.2.2)
#>  textshaping         0.3.6   2021-10-13 [1] CRAN (R 4.2.3)
#>  tibble            * 3.2.1   2023-03-20 [1] CRAN (R 4.2.3)
#>  tidyr             * 1.3.0   2023-01-24 [1] CRAN (R 4.2.3)
#>  tidyselect          1.2.0   2022-10-10 [1] CRAN (R 4.2.2)
#>  tidyverse         * 2.0.0   2023-02-22 [1] CRAN (R 4.2.3)
#>  timechange          0.2.0   2023-01-11 [1] CRAN (R 4.2.3)
#>  tzdb                0.4.0   2023-05-12 [1] CRAN (R 4.2.3)
#>  units               0.8-2   2023-04-27 [1] CRAN (R 4.2.3)
#>  utf8                1.2.3   2023-01-31 [1] CRAN (R 4.2.3)
#>  uuid                1.1-0   2022-04-19 [1] CRAN (R 4.2.0)
#>  vctrs               0.6.2   2023-04-19 [1] CRAN (R 4.2.3)
#>  withr               2.5.0   2022-03-03 [1] CRAN (R 4.2.2)
#>  xfun                0.39    2023-04-20 [1] CRAN (R 4.2.3)
#>  xml2                1.3.4   2023-04-27 [1] CRAN (R 4.2.3)
#>  xtable              1.8-4   2019-04-21 [1] CRAN (R 4.2.2)
#>  yaml                2.3.7   2023-01-23 [1] CRAN (R 4.2.3)
#>  zip                 2.3.0   2023-04-17 [1] CRAN (R 4.2.3)
#> 
#>  [1] C:/Temp/R-4.2.2/library
#> 
#> ──────────────────────────────────────────────────────────────────────────────
1 Like

Hello @kostas.danis.

The error you’re encountering is due to the incorrect placement of the comma in your case_when function. If you want to use logical OR between the conditions, you should use the | operator within the conditions.

Try this code:

 mutate(gastrosymptoms = case_when(
    # Those who had diarrhoea or bloody diarrhoea or vomiting are marked as TRUE (fell ill after the meal)
    diarrhoea == TRUE | 
    bloody == TRUE | 
    vomiting == TRUE ~ TRUE,
    # The rest are FALSE. This includes those who ate a meal but had no symptoms (did not fall ill after the meal)
    .default = FALSE
  ))

As a side note, you can use either .default = FALSE or TRUE ~ FALSE for the β€œrest” statment.

1 Like

Welcome @kostas.danis and thank you for posting with a reproducible example!
If @lnielsen answered your question you can mark it as the β€œSolution”

1 Like

Thank you Luca

1 Like