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阈值
的范围内,则选择它们进入过滤步骤4new_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