Вот решение, которое на первый взгляд не так просто, но предназначено для масштабирования больше, чем эти 3 столбца, которые вы проверяете. Я gather
отредактировал фрейм данных в длинный формат, создал одну строку для каждого идентификатора всех результатов, затем использовал case_when
для проверки каждой из возможностей: есть результат с 2, есть результат с 1, или нет результата. Мне нравится case_when
, чтобы избежать множества ifelse
, вложенных друг в друга.
Я также добавил тестовый случай, когда нет результата, просто чтобы убедиться, что такая возможность тоже есть.
library(tidyverse)
df %>%
# test case with no results
bind_rows(tibble(id = 12)) %>%
gather(key = scan, value = result, -id) %>%
group_by(id) %>%
summarise(all_str = paste(result, collapse = ",")) %>%
mutate(overall = case_when(
str_detect(all_str, "2") ~ "2",
str_detect(all_str, "1") ~ "1",
T ~ "no result"
))
#> # A tibble: 12 x 3
#> id all_str overall
#> <dbl> <chr> <chr>
#> 1 1. 1,1,1 1
#> 2 2. 1,1,NA 1
#> 3 3. 1,1,1 1
#> 4 4. 1,1,NA 1
#> 5 5. 1,1,NA 1
#> 6 6. 1,1,NA 1
#> 7 7. 1,NA,NA 1
#> 8 8. 1,NA,NA 1
#> 9 9. 1,NA,NA 1
#> 10 10. 1,2,NA 2
#> 11 11. 1,2,NA 2
#> 12 12. NA,NA,NA no result
Создано в 2018-04-27 пакетом Представ (v0.2.0).