Фон
Несколько языков SQL (в основном я использую postgreSQL) имеют функцию coalesce, которая возвращает первый непустой элемент столбца для каждой строки. Это может быть очень эффективно использовать, если в таблицах есть много элементов NULL
.
Я встречаюсь с этим во многих сценариях в R, а также при работе с неструктурированными данными, в которых много NA.
Я сделал наивную реализацию сам, но это смехотворно медленно.
coalesce <- function(...) {
apply(cbind(...), 1, function(x) {
x[which(!is.na(x))[1]]
})
}
Пример
a <- c(1, 2, NA, 4, NA)
b <- c(NA, NA, NA, 5, 6)
c <- c(7, 8, NA, 9, 10)
coalesce(a,b,c)
# [1] 1 2 NA 4 6
Вопрос
Есть ли эффективный способ реализации coalesce
в R?