Это решение может работать для вас:
library(tidyverse)
people <- c("Anne", "Betty", "Carol", "Darrel")
low <- c(1, 1, 0, 0)
medium <- c(1, 0, 0, 0)
high <- c(0, 1, 1, 0)
df <- tibble(people, low, medium, high)
df %>% dplyr::mutate(lowest_score = ifelse(low == 1, "low",
ifelse(medium == 1, "medium",
ifelse(high == 1, "high", "no_response"))))
# A tibble: 4 x 5
people low medium high lowest_score
<chr> <dbl> <dbl> <dbl> <chr>
1 Anne 1 1 0 low
2 Betty 1 0 1 low
3 Carol 0 0 1 high
4 Darrel 0 0 0 no_response
Это изменяет новый столбец 'lower_score' путем постепенного тестирования от низкого -> med -> high, если столбец имеет значение, равное 1. Если Столбец имеет 1, затем он прекращает поиск и записывает, в каком столбце встречается первый 1, а если столбец равен 0, он переходит к следующему столбцу. Если все 0, он сообщает "no_response". Не уверен, что вы ожидаете этого, хотя.