Вызов dplyr::coalesce
возвращает первые не пропущенные значения:
> vec1 <- c(11, 12, NA, NA, NA)
> vec2 <- c(21, 22, NA, NA, 25)
> vec3 <- c(NA, 32, NA, 34, 35)
> coalesce(vec1, vec2, vec3)
[1] 11 12 NA 34 25
, что аналогично вызову vec1 | vec2 | vec3
(возврат значений вместо логических).
Есть ли функцияаналогично vec1 & vec2 & vec3
, возвращая последнее значение, если ничего не пропущено? Это стоит тонны, но я не могу найти краткий / простой способ сделать это.
> vec1 <- c(11, 12, NA, NA, NA)
> vec2 <- c(21, 22, NA, NA, 25)
> vec3 <- c(NA, 32, NA, 34, 35)
> ideal_fn(vec1, vec2, vec3)
[1] NA 32 NA NA NA
Для чисел и логики я могу сделать это легко / кратко с vec3[vec1 & vec2 & vec3]
или ifelse(vec1 & vec2, vec3)
. Но они не работают с символьными векторами.
Есть ли что-то лучше, чем ifelse(!is.na(vec1) & !is.na(vec2) & !is.na(vec3), vec3, NA)
? Мне кажется, что это очень окольный способ решения очень простой проблемы.