Вы можете изменить свою функцию следующим образом:
my_fun <- function(x) {
if_else(any(!is.na(x)), na.exclude(x)[1], NA_character_)
}
Сначала он проверяет, есть ли какие-либо не пропущенные значения, и возвращает первое не пропущенное значение, а NA
в противном случае.
Если вы используете функцию только один раз, вы также можете сделать:
buildingCopy %>%
group_by(A) %>%
summarise_all(funs(if_else(any(!is.na(.)), na.exclude(.)[1], NA_character_)))
# A tibble: 2 x 5
# A B C D E
# <dbl> <chr> <chr> <chr> <chr>
# 1 1 hi we are here
# 2 2 u NA are where
Или вы можете использовать условие в summarise_if
-статем:
buildingCopy %>%
add_row(A = 2, B = "u", C = NA_character_, D = "are", E = "where") %>%
group_by(A) %>%
summarise_if(funs(any(!is.na(.))), funs(na.exclude(.)[1]))
# A tibble: 2 x 5
# A B C D E
# <dbl> <chr> <chr> <chr> <chr>
# 1 1 hi we are here
# 2 2 u NA are where
Данные
buildingCopy <- structure(list(A = c(1L, 1L, 1L, 2L),
B = c(NA, "hi", NA, "u"),
C = c("we", "we", NA, NA),
D = c("are", NA, "are", "are"),
E = c("here", "here", "there", "where")),
class = "data.frame", row.names = c(NA, -4L))