Я бы использовал apply для решения этой проблемы, так как вам нужно обрабатывать определенные c случаи. EG
df <- structure(list(One = structure(c(1L, NA, NA, 1L, 2L), .Label = c("Cat",
"Horse", "NA"), class = "factor"), Two = structure(c(NA, 1L,
NA, NA, NA), .Label = c("Dog", "NA"), class = "factor"), Three = structure(c(NA,
NA, NA, 2L, NA), .Label = c("NA", "Rat"), class = "factor"),
Four = structure(c(NA, NA, 1L, NA, NA), .Label = c("Mouse",
"NA"), class = "factor"), Five = structure(c(NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_), .Label = "NA", class = "factor")), row.names = c(NA,
-5L), class = "data.frame")
apply(df, 1, function(row) if(sum(!is.na(row)) == 1) na.omit(row)[[1]] else "Error")
#> [1] "Cat" "Dog" "Mouse" "Error" "Horse"
Создано в 2020-01-14 пакетом представ (v0.3.0)