【问题标题】:How to combine the values of various columns in a tibble by the same row ID如何通过相同的行ID组合小标题中各个列的值
【发布时间】:2017-03-25 17:43:24
【问题描述】:

所以我有一个像这样的小标题(数据框)(实际的数据框是 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。我想将这两行组合起来,使小标题看起来像

# 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)。这可以通过简单的方式来实现,例如使用收集和传播吗?非常感谢。

【问题讨论】:

    标签: r dataframe tidyverse


    【解决方案1】:

    我们可以通过'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
    

    【讨论】:

    • 代码适用于这个例子,但是当我应用到我的实际数据框时,它给了我“summarise_impl(.data, dots) 中的错误:期望单个值”。
    • @S.Wang 这可能是因为您的原始数据集每列的 NA 数量不相等。一种选择是替换为summarise_each(funs(sum(., na.rm = TRUE)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多