Вместо использования нескольких case_when
, основываясь на описании, мы можем это сделать (если мы сравниваем число в имени столбца, извлекаем это число с помощью sub
, делаем сравнение и получаем индекс столбца с max.col
на логической матрице. Здесь мы указываем last
, так что если у нас есть строка с c(FALSE, TRUE, TRUE, TRUE)
, она дает индекс столбца как 4
nm1 <- grep("^id_\\d+", names(df), value = TRUE)
max.col(df[nm1] >= as.numeric(sub("id_", "", nm1))[col(df[nm1])], "last")
На основе обновленного сообщения с пример 'iris'
nm1 <- grep("^id_\\d+", names(iris), value = TRUE)
max.col(iris[nm1] >= x, "last")