如何通过 r 中的阈值计算匹配组
How count matching groups by a threshold in r
我有一个数据集,其中包含我在其上使用了 2 个机器学习模型的基因列表,因此有 2 组预测分数。我希望确定两组之间有多少基因处于相似的分数范围内。
例如我的数据是这样的:
Gene1 Score1 Gene2 Score2
PPL 0.77 COL8A1 0.78
NPHS2 0.77 ARHGEF25 0.77
EHD4 0.75 C1GALT1 0.77
THBS1 0.74 CEP164 0.76
PRKAA1 0.74 MLLT3 0.76
WNT7A 0.73 PPL 0.76
DVL1 0.72 MRVI1 0.75
TUBGCP4 0.71 BMPR1B 0.75
SARM1 0.71 RAB1A 0.75
VPS4A 0.70 CLTC 0.75
在这两个列表中,唯一匹配的基因是 PPL
- 我正在尝试编写代码来提取它,例如该代码给出了 2 个列表之间的所有匹配基因,得分 > 0.75。我正在尝试这样做以检查多个分数阈值的基因。
我研究过使用类似措辞问题的代码,但 none 有一个类似的数据结构适用于我的问题。我试过使用 filter()
和 match()
但没有成功,如有任何帮助,我们将不胜感激。
Input data:
dput(df)
structure(list(Gene1 = c("PPL", "NPHS2", "EHD4", "THBS1", "PRKAA1",
"WNT7A", "DVL1", "TUBGCP4", "SARM1", "VPS4A"), `Score1` = c(0.78,
0.77, 0.75, 0.74, 0.74, 0.73,
0.72, 0.71, 0.71, 0.70), Gene2 = c("COL8A1",
"ARHGEF25", "C1GALT1", "CEP164", "MLLT3", "PPL", "MRVI1", "BMPR1B",
"RAB1A", "CLTC"), `Score2` = c(0.78, 0.77,
0.77, 0.76, 0.76, 0.76, 0.75,
0.75, 0.75, 0.75)), row.names = c(NA, -10L
), class = c("data.table", "data.frame"))
您可以自己加入数据框来获取数据中的所有共同基因。
library(dplyr)
inner_join(df, df, by = c('Gene1' = 'Gene2')) %>%
select(Gene1, Score1 = Score1.x, Score2 = Score2.y)
# Gene1 Score1 Score2
#1: PPL 0.78 0.76
然后您可以 filter
Score1
和 Score2
基于一些阈值。
留在data.table:
library(data.table)
df1 <- df[,.(Gene1,Score1)]
df2 <- df[,.(Gene2,Score2)]
threshold <- 0.75
df1[df2, on = .(Gene1 = Gene2)][Score1 > threshold & Score2 > threshold]
Gene1 Score1 Score2
1: PPL 0.78 0.76
我有一个数据集,其中包含我在其上使用了 2 个机器学习模型的基因列表,因此有 2 组预测分数。我希望确定两组之间有多少基因处于相似的分数范围内。
例如我的数据是这样的:
Gene1 Score1 Gene2 Score2
PPL 0.77 COL8A1 0.78
NPHS2 0.77 ARHGEF25 0.77
EHD4 0.75 C1GALT1 0.77
THBS1 0.74 CEP164 0.76
PRKAA1 0.74 MLLT3 0.76
WNT7A 0.73 PPL 0.76
DVL1 0.72 MRVI1 0.75
TUBGCP4 0.71 BMPR1B 0.75
SARM1 0.71 RAB1A 0.75
VPS4A 0.70 CLTC 0.75
在这两个列表中,唯一匹配的基因是 PPL
- 我正在尝试编写代码来提取它,例如该代码给出了 2 个列表之间的所有匹配基因,得分 > 0.75。我正在尝试这样做以检查多个分数阈值的基因。
我研究过使用类似措辞问题的代码,但 none 有一个类似的数据结构适用于我的问题。我试过使用 filter()
和 match()
但没有成功,如有任何帮助,我们将不胜感激。
Input data:
dput(df)
structure(list(Gene1 = c("PPL", "NPHS2", "EHD4", "THBS1", "PRKAA1",
"WNT7A", "DVL1", "TUBGCP4", "SARM1", "VPS4A"), `Score1` = c(0.78,
0.77, 0.75, 0.74, 0.74, 0.73,
0.72, 0.71, 0.71, 0.70), Gene2 = c("COL8A1",
"ARHGEF25", "C1GALT1", "CEP164", "MLLT3", "PPL", "MRVI1", "BMPR1B",
"RAB1A", "CLTC"), `Score2` = c(0.78, 0.77,
0.77, 0.76, 0.76, 0.76, 0.75,
0.75, 0.75, 0.75)), row.names = c(NA, -10L
), class = c("data.table", "data.frame"))
您可以自己加入数据框来获取数据中的所有共同基因。
library(dplyr)
inner_join(df, df, by = c('Gene1' = 'Gene2')) %>%
select(Gene1, Score1 = Score1.x, Score2 = Score2.y)
# Gene1 Score1 Score2
#1: PPL 0.78 0.76
然后您可以 filter
Score1
和 Score2
基于一些阈值。
留在data.table:
library(data.table)
df1 <- df[,.(Gene1,Score1)]
df2 <- df[,.(Gene2,Score2)]
threshold <- 0.75
df1[df2, on = .(Gene1 = Gene2)][Score1 > threshold & Score2 > threshold]
Gene1 Score1 Score2
1: PPL 0.78 0.76