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

时间:2017-03-25 17:43:24

标签: r dataframe tidyverse

所以我有一个像这样的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)。这可以通过简单的方式实现,例如使用聚集和传播吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

我们可以在按&#39; sample_ID&#39;

分组后使用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