问题描述
我有一个基因数据集,我已经比较了一些预测该基因是否可能引起疾病的模型。我正在寻找选择在我研究的所有机器学习方法中最有可能引起疾病的基因中排名前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