如何通过相同的行 ID 组合 tibble 中各个列的值

How to combine the values of various columns in a tibble by the same row ID

所以我有一个像这样的 tibble(数据框)(实际数据框大约有 100 多行)

sample_ID <- c(1, 2, 2, 3)
A <- c(NA, NA, 1, 3)
B <- c(1, 2, NA, 1)
C <- c(5, 1, NA, 2)
D <- c(NA, NA, 3, 1)
tibble(sample_ID,A,B,C,D)

# which reads
# A tibble: 4 × 5
  sample_ID     A     B     C     D
       <dbl> <dbl> <dbl> <dbl> <dbl>
1         1    NA     1     5    NA
2         2    NA     2     1    NA
3         2     1    NA    NA     3
4         3     3     1     2     1

从这里可以看出,第二行和第三行具有相同的样本ID。我想合并这两行,使 tibble 看起来像

# A tibble: 3 × 5
  sample_ID     A     B     C     D
       <dbl> <dbl> <dbl> <dbl> <dbl>
1         1    NA     1     5    NA
2         2     1     2     1     3
3         3     3     1     2     1

换句话说,我希望 sample_ID 的行是唯一的(顺序无关紧要),并合并其他列的值(尽可能覆盖 NA)。这可以通过简单的方式实现吗,例如使用 gather 和 spread?非常感谢。

按'sample_ID'分组后我们可以使用summarise_each

library(dplyr)
df %>% 
   group_by(sample_ID) %>% 
   summarise_each(funs(na.omit))
# A tibble: 3 × 5
#   sample_ID     A     B     C     D
#      <dbl> <dbl> <dbl> <dbl> <dbl>
#1         1    NA     1     5    NA
#2         2     1     2     1     3
#3         3     3     1     2     1