R 如何在多个未列出的字符串中查找匹配值?
我有两个数据集:R 如何在多个未列出的字符串中查找匹配值?,r,string,dataframe,strsplit,R,String,Dataframe,Strsplit,我有两个数据集: #df1: Gene interactors ACE BRCA, HER2 NOS NA, NA P53 NA CDON TGBP df2: Gene interactors AGT NOS, HER2 NPKB CDON P70 GPC IK TGBP 我正在寻找确定df1中作为df2下的相互作用者列出的基因,并确定df1中与df2中的相互作用者匹配的相互作用者的基因 输出: Ge
#df1:
Gene interactors
ACE BRCA, HER2
NOS NA, NA
P53 NA
CDON TGBP
df2:
Gene interactors
AGT NOS, HER2
NPKB CDON
P70 GPC
IK TGBP
我正在寻找确定df1中作为df2下的相互作用者列出的基因,并确定df1中与df2中的相互作用者匹配的相互作用者的基因
输出:
Gene interactors matched_gene_interactor matched_interactor_interactor
ACE BRCA, HER2 FALSE TRUE
NOS NA, NA TRUE FALSE
P53 NA FALSE FALSE
CDON TGBP TRUE TRUE
#ACE has an interactor (HER2) in both df1 and df2
#NOS matches itself as an interactor in df2
#CDON matches itself as an interactor in df2 and as having an interactor (TGBP) in both df1 and df2
我已经能够通过编码获得matched\u gene\u interactitor
列:
df1$matched_gene_interactor <- df1$Gene %in% unlist(strsplit(df2$interactors, ", "))
如何匹配具有未列出字符串拆分的两个数据集?我有生物学背景,所以不知道从哪里开始
输入数据示例:
df1:
structure(list(Gene = c("ACE", "NOS", "P53", "CDON"), interactors = c("BRCA, HER2",
"NA, NA", NA, "TGBP")), row.names = c(NA, -4L), class = c("data.table",
"data.frame"))
df2:
structure(list(Gene = c("AGT", "NPKB", "P70", "IK"), interactors = c("NOS, HER2",
"CDON", "GPC", "TGBP")), row.names = c(NA, -4L), class = c("data.table",
"data.frame"))
您可以在逗号上拆分
df2
的interactiors
,对于每一行,检查df1
中的interactiors
是否存在任何值
temp <- unlist(strsplit(df2$interactors, ', '))
df1$matched_interactor_interactor <- sapply(strsplit(df1$interactors, ', '),
function(x) any(x %in% temp))
df1
# Gene interactors matched_gene_interactor matched_interactor_interactor
#1: ACE BRCA, HER2 FALSE TRUE
#2: NOS NA, NA TRUE FALSE
#3: P53 <NA> FALSE FALSE
#4: CDON TGBP TRUE TRUE
temp <- unlist(strsplit(df2$interactors, ', '))
df1$matched_interactor_interactor <- sapply(strsplit(df1$interactors, ', '),
function(x) any(x %in% temp))
df1
# Gene interactors matched_gene_interactor matched_interactor_interactor
#1: ACE BRCA, HER2 FALSE TRUE
#2: NOS NA, NA TRUE FALSE
#3: P53 <NA> FALSE FALSE
#4: CDON TGBP TRUE TRUE
grepl(paste0('\\b', temp, '\\b', collapse = '|'), df1$interactors)
#[1] TRUE FALSE FALSE TRUE