【问题标题】:How to merge row of a dataframe under conditions如何在条件下合并数据框的行
【发布时间】:2021-08-06 14:54:09
【问题描述】:

我需要你的帮助来在条件下合并数据框的一些行

请在下面找到我的数据框示例:

ID=c("A1", "A2", "A3", "A4", "A5", "A6", "A1", "A3", "A6", "A1", "A2", "A5", "A6")
G1=c(1,0,0,0,0,0,2,0,0,0,0,0,0)
G2=c(0,1,0,0,0,0,0,0,0,0,0,0,0)
G3=c(0,0,1,0,0,0,0,0,0,0,0,0,0)
G4=c(0,0,0,1,0,0,0,0,0,0,0,0,0)
G5=c(0,0,0,0,1,0,0,0,0,0,0,0,0)
G6=c(0,0,0,0,0,0,0,2,0,0,0,3,0)
G7=c(0,0,0,0,0,0,0,0,0,3,0,0,0)
G8=c(0,0,0,0,0,0,0,0,0,3,3,0,0)
G9=c(0,0,0,0,0,1,0,0,1,0,0,3,2)

 data
   ID G1 G2 G3 G4 G5 G6 G7 G8 G9
1  A1  1  0  0  0  0  0  0  0  0
2  A2  0  1  0  0  0  0  0  0  0
3  A3  0  0  1  0  0  0  0  0  0
4  A4  0  0  0  1  0  0  0  0  0
5  A5  0  0  0  0  1  0  0  0  0
6  A6  0  0  0  0  0  0  0  0  1
7  A1  2  0  0  0  0  0  0  0  0
8  A3  0  0  0  0  0  2  0  0  0
9  A6  0  0  0  0  0  0  0  0  1
10 A1  0  0  0  0  0  0  3  3  0
11 A2  0  0  0  0  0  0  0  3  0
12 A5  0  0  0  0  0  3  0  0  3
13 A6  0  0  0  0  0  0  0  0  2

我想在这种情况下合并数据框中具有相同 ID 的原始数据:

如果同一个 ID 在同一列中有多个值,我想保留合并行中的最小值(A1 和 A6 就是这种情况)。

以下是我的数据框遵循这些规则的期望输出

   ID G1 G2 G3 G4 G5 G6 G7 G8 G9
1 A1  1  0  0  0  0  0  3  3  0
2 A2  0  1  0  0  0  0  0  3  0
3 A3  0  0  1  0  0  2  0  0  0
4 A4  0  0  0  1  0  0  0  0  0
5 A5  0  0  0  0  1  3  0  0  3
6 A6  0  0  0  0  0  0  0  0  1

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    也许我们可以像这样使用aggregate

    > aggregate(. ~ ID, df, function(x) ifelse(sum(x > 0), min(x[x > 0]), 0))
      ID G1 G2 G3 G4 G5 G6 G7 G8 G9
    1 A1  1  0  0  0  0  0  3  3  0
    2 A2  0  1  0  0  0  0  0  3  0
    3 A3  0  0  1  0  0  2  0  0  0
    4 A4  0  0  0  1  0  0  0  0  0
    5 A5  0  0  0  0  1  3  0  0  3
    6 A6  0  0  0  0  0  0  0  0  1
    

    【讨论】:

      【解决方案2】:

      min_ 的选项(来自hablar

      library(hablar)
      library(dplyr)
      library(tidyr)
      data %>% 
          group_by(ID) %>%
          summarise(across(everything(), ~ replace_na(min_(.[. > 0]), 0)))
      

      -输出

      # A tibble: 6 x 10
        ID       G1    G2    G3    G4    G5    G6    G7    G8    G9
        <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
      1 A1        1     0     0     0     0     0     3     3     0
      2 A2        0     1     0     0     0     0     0     3     0
      3 A3        0     0     1     0     0     2     0     0     0
      4 A4        0     0     0     1     0     0     0     0     0
      5 A5        0     0     0     0     1     3     0     0     3
      6 A6        0     0     0     0     0     0     0     0     1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多