Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据范围内的条件进行过滤?_R_Dplyr_Data.table - Fatal编程技术网

R 如何根据范围内的条件进行过滤?

R 如何根据范围内的条件进行过滤?,r,dplyr,data.table,R,Dplyr,Data.table,我有一个数据集,看起来像: Group Gene Score direct_count secondary_count Avg_Score Upper_SD_Threshold 1 AQP11 0.31 4 5 0.3 0.48 1 CLNS1A 0.27 0 2 0.3

我有一个数据集,看起来像:

Group   Gene    Score   direct_count    secondary_count   Avg_Score    Upper_SD_Threshold
  1    AQP11    0.31          4                5             0.3            0.48
  1    CLNS1A   0.27          0                2             0.3            0.48
  1    RSF1     0.49          3                6             0.3            0.48
  2    CFDP1    0.58          1                2             0.57           0.60
  2    CHST6    0.59          1                3             0.57           0.60
  2    UBL      0.56          1                3             0.57           0.60
  2    TMEM     0.61          0                0             0.57           0.60
  3    ACE      0.634         1                1             0.63           0.63
  3    NOS2     0.6345        1                1             0.63           0.63
  4    Gene1    0.1           10              20             0.5            0.55
  4    Gene2    0.68          3                1             0.5            0.7
  4    Gene3    0.7           0                1             0.5            0.7
  5    AGT      0.75          0                0             0.00           0.00
我正试图根据一些过滤器选择每个组的基因:

  • 如果该基因是其
    组中唯一的基因,则保留/选择该基因(在我的示例中为第5组)
  • 如果
    组的
    得分高于
    上限阈值,则保留得分最高的基因。如果超过1个基因较高,则在步骤4和5中进行筛选
  • 如果所有基因都小于
    上限SD\U阈值
    ,但也在
    平均评分
    上限SD\U阈值
    的范围内,则选择它们进入过滤步骤4
  • 选择具有最大直接计数的基因,如果两个基因具有相同的直接计数,则转到步骤5
  • 选择具有最大次级计数的基因,如果两个基因也具有相同的次级计数,则保留这两个基因
  • 最终,所有组都应该至少选择1个基因,我一直在编码第2步并设置范围

    目前我正在尝试:

    new_df <- df %>% 
      group_by(Group) %>% 
      filter(if(n() > 1) {(Score < Upper_SD_Threshold) } else TRUE) %>%
      filter(between(Score, Avg_Score, Upper_SD_Threshold)) %>%
      slice_max(direct_count, n = 1) %>% 
      slice_max(secondary_count, n = 1) %>% 
      ungroup()
    
    预期产出:

    Group   Gene    Score   direct_count    secondary_count   Avg_Score    Upper_SD_Threshold
      1    RSF1     0.49          3                6             0.3            0.48 #Only gene > upper
      2    TMEM     0.61          0                0             0.57           0.60 #Only gene > upper
      3    ACE      0.634         1                1             0.63           0.63 #ACE and NOS2 match both counts
      3    NOS2     0.6345        1                1             0.63           0.63
      4    Gene2    0.68          3                1             0.5            0.7  #highest direct_count
      5    AGT      0.75          0                0             0.00           0.00 #only gene in group
    

    这是什么
    xGB3标签
    ?另外,如果每个分数低于
    Avg_分数
    ,并且组数大于1,会发生什么情况?问起来有点奇怪,因为不可能所有的数字都低于平均值。但很明显,这不是群中的平均值。谢谢你发现了这一点,XGB3label只是
    分数,我已经重命名了这些列,这样更清晰了。如果所有内容都在
    Avg_score
    下,那么我也会在
    count
    列下过滤它们,并保留计数最高的内容。我在没有实际计算的情况下算出了平均值,因为这个例子正好是这个数字和
    上限\u SD\u阈值之间的范围,你是对的,没有一个应该低于平均值,所以希望我也可以忽略这个规则
    
    Group   Gene    Score   direct_count    secondary_count   Avg_Score    Upper_SD_Threshold
      1    RSF1     0.49          3                6             0.3            0.48 #Only gene > upper
      2    TMEM     0.61          0                0             0.57           0.60 #Only gene > upper
      3    ACE      0.634         1                1             0.63           0.63 #ACE and NOS2 match both counts
      3    NOS2     0.6345        1                1             0.63           0.63
      4    Gene2    0.68          3                1             0.5            0.7  #highest direct_count
      5    AGT      0.75          0                0             0.00           0.00 #only gene in group