【问题标题】:How to select highest valued row by group in r? [duplicate]如何在r中按组选择最高值的行? [复制]
【发布时间】:2020-10-22 12:54:28
【问题描述】:

我有一个名为“基因座”的组中的基因数据集,我正在寻找与相同基因座/组中的基因相比得分最高的基因

我的输入数据如下所示:

    loci Gene     Score
1:    1  AQP11   0.5566507
2:    1 CLNS1A   0.2811747
3:    1   RSF1   0.5269924
4:    2  CFDP1   0.4186066
5:    2  CHST6   0.5395135

我的输出将选择基因座 1 的 3 个基因中得分最高的组/基因座 1 的基因,然后是与组 2 中的其他基因相比得分最高的基因。

所以我试图得到的这个例子的输出是:

     loci  Gene     Score
1:    1    AQP11   0.5566507 #highest score in loci 1
2:    2    CHST6   0.5395135 #highest score in loci 2

如何按行分组筛选最高分?我不知道从哪里开始。

输入数据:

structure(list(loci = c(1L, 1L, 1L, 2L, 2L), Gene = c("AQP11", 
"CLNS1A", "RSF1", "CFDP1", "CHST6"), Score = c(0.556650698184967, 
0.281174659729004, 0.526992380619049, 0.418606609106064, 0.539513528347015
)), row.names = c(NA, -5L), class = c("data.table", "data.frame"
))

我一直在用 dplyr::group_by() 尝试使用 dplyr,但我不断收到各种错误。

【问题讨论】:

  • 如果出现平局,是要所有基因,还是随机选一个?
  • 很好,我没有考虑过,它不应该发生,但如果发生,我会想要所有基因
  • 这个问题肯定已经在这个网站上得到了回答。

标签: r dataframe dplyr data.table


【解决方案1】:

使用 dplyr:

> library(dplyr)
> df %>% group_by(loci) %>% filter(Score == max(Score))
# A tibble: 2 x 3
# Groups:   loci [2]
   loci Gene  Score
  <dbl> <chr> <dbl>
1     1 AQP11 0.557
2     2 CHST6 0.540

【讨论】:

    【解决方案2】:

    data.table:

    library(data.table)
    setDT(df)
    df[, .SD[which.max(Score)], by = loci]
    
       loci  Gene     Score
    1:    1 AQP11 0.5566507
    2:    2 CHST6 0.5395135
    

    【讨论】:

      【解决方案3】:

      使用subset 的基本 R 选项

      subset(dt,ave(Score,loci,FUN = max)==Score)
      

      给予

         loci  Gene     Score
      1:    1 AQP11 0.5566507
      2:    2 CHST6 0.5395135
      

      另一个使用aggregate的基本R选项

      aggregate(.~loci,dt[with(dt,order(-Score,loci)),],head,1)
      

      给予

        loci  Gene             Score
      1    1 AQP11 0.556650698184967
      2    2 CHST6 0.539513528347015
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-31
        • 2012-07-25
        • 1970-01-01
        • 2020-03-23
        • 1970-01-01
        • 1970-01-01
        • 2015-12-05
        相关资源
        最近更新 更多