combine rows in data frame containing NA to make complete row
coalesce, r, tidyverse
Solution
I haven't figured out how to put the `coalesce_by_column` function inside the `dplyr` pipeline, but this works:
coalesce_by_column <- function(df) {
return(coalesce(df[1], df[2]))
}
df %>%
group_by(A) %>%
summarise_all(coalesce_by_column)
## A B C D E
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 3 2 5
## 2 2 4 5 3 4
Edit: include @Jon Harmon's solution for more than 2 members of a group
# Supply lists by splicing them into dots:
coalesce_by_column <- function(df) {
return(dplyr::coalesce(!!! as.list(df)))
}
df %>%
group_by(A) %>%
summarise_all(coalesce_by_column)
#> # A tibble: 2 x 5
#> A B C D E
#> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 2 3 2 5
#> 2 2 4 5 3 4
Problem
I know this is a duplicate Q but I can't seem to find the post again Using the following data ``` df <- data.frame(A=c(1,1,2,2),B=c(NA,2,NA,4),C=c(3,NA,NA,5),D=c(NA,2,3,NA),E=c(5,NA,NA,4)) A B C D E 1 NA 3 NA 5 1 2 NA 2 NA 2 NA NA 3 NA 2 4 5 NA 4 ``` Grouping by `A`, I'd like the following output using a `tidyverse` solution ``` A B C D E 1 2 3 2 5 2 4 5 3 4 ``` I have many groups in `A`. I think I saw an answer using `coalesce` but am unsure how to get it work. I'd like a solution that works with `characters` as well. Thanks!