如何在r中的列之间选择匹配值的最高百分比?

问题描述

我有一个基因数据集,我已经比较了一些预测该基因是否可能引起疾病的模型。我正在寻找选择在我研究的所有机器学习方法中最有可能引起疾病的基因中排名前25%的基因。因此,获得所有模型都同意的可能疾病基因的最高百分比。

我的数据看起来像这样(尽管我实际上有更多的分数列):

http-keepalive = true

因此,在此示例中,Gene score1 score2 BRCA2 0.7 0.7 SLC25A20 0.2644568 0.486816 GLS 0.4560175 0.6631010 IKZF4 0.7468294 0.2189585 NRIP3 0.8446390 0.4570968 SENP1 0.5372014 0.1724868 SLC27A6 0.6321821 0.1218227 SRFBP1 0.2293986 0.2688244 OBFC1 0.2279012 0.2187441 STEAP2 0.2239941 0.2001475 是两个模型得分均一致的唯一基因,其得分最高(在此示例中为前25%),因此应将其剔除。

我不确定如何执行此操作,我一直在尝试使用BRCA2,并且在if语句还不完善的情况下,我们将不胜感激。

match()

解决方法

一个dplyr选项可能是:

df %>%
 filter(Reduce(`&`,across(starts_with("Score"),~ cume_dist(.) >= 0.75)))

   Gene Score1 Score2
1 BRCA2    0.7    0.7
,

这是一种data.table方法

#identify columns with score values
score_cols <- grep( "^Score",names(DT),value = TRUE )
#filter based on colwise quantile
DT[ rowSums( sapply( DT[,.SD,.SDcols = score_cols],function(x) x > quantile(x,0.75 ) ) ) >= length( score_cols),]

#     Gene Score1 Score2
# 1: BRCA2    0.7    0.7