我正在过滤一些路径名称,我想仅包含包含以下内容的路径:
"HEMATOPOIETIC", "ERYTHROCYTE", "ERYTHROID", "STEM", "STEMNESS", "HEMATOPOIESIS"
并绘制结果的条形图。到目前为止,这是我的脚本:
obese <- gsea_obese %>%
filter(FDR.q.val < 0.25) %>%
filter(NOM.p.val < 0.05) %>%
filter(str_detect(NAME, "HEMATOPOIETIC|ERYTHROCYTE|ERYTHROID|STEM|STEMNESS|HEMATOPOIESIS")) %>%
arrange(FDR.q.val)
ggplot(obese, aes(reorder(NAME, NES), NES)) +
geom_col(aes(fill=FDR.q.val)) +
scale_fill_gradient(low = "blue", high = "red") +
coord_flip() +
labs(x="Pathway", y="Normalized Enrichment Score",
title="Enriched Genes JAK2 vs WT in Obese mice")
在我的结果中,我得到了像
"REACTOME_NEURONAL_SYSTEM", "REACTOME_CYTOKINE_SIGNALING_IN_IMMUNE_SYSTEM", "GOBP_IMMUNE_SYSTEM_DEVELOPMENT", ...
这样不需要的路径,我注意到这是由于单词"SYSTEM"
包含"STEM"
。我尝试使用 "\\b"
但它根本不返回(或不匹配)任何路径名称。也许我在脚本中放错了"\\b"
的位置,所以任何帮助将不胜感激!
编辑: 这是输入示例:
gsea_obese <- c(
"RAMALHO_STEMNESS_UP",
"IVANOVA_HEMATOPOIESIS_INTERMEDIATE_PROGENITOR",
"BYSTRYKH_HEMATOPOIESIS_STEM_CELL_QTL_CIS",
"IVANOVA_HEMATOPOIESIS_EARLY_PROGENITOR",
"RIZ_ERYTHROID_DIFFERENTIATION",
"BYSTRYKH_HEMATOPOIESIS_STEM_CELL_AND_BRAIN_QTL_CIS",
"RIZ_ERYTHROID_DIFFERENTIATION_CCNE1",
"REACTOME_CYTOKINE_SIGNALING_IN_IMMUNE_SYSTEM",
"GOBP_ERYTHROCYTE_HOMEOSTASIS",
"REACTOME_NEURONAL_SYSTEM",
)
我期望的输出是它们不包括我指定的模式之外的输出。我设法解决它
filter(str_detect(NAME, "HEMATOPOIETIC|ERYTHROCYTE|ERYTHROID|\\b STEM|STEMNESS|HEMATOPOIESIS"))
,但是我也尝试使用filter(str_detect(NAME, "\\b HEMATOPOIETIC|\\b ERYTHROCYTE|\\b ERYTHROID|\\b STEM|\\b STEMNESS|\\b HEMATOPOIESIS"))
,但我不明白为什么这个脚本不返回任何匹配项。
_
不构成单词边界:
grepl("\\ba\\b", "_a_")
# [1] FALSE
这是因为正则表达式中的
\b
“匹配单词任一边缘的空字符串”,而“单词”通常是 [[:alnum:]_]
(它明确包含下划线)。 (有关所有这些以及更多解释,请参阅 ?regex
。)
我们需要改进正则表达式来寻找特定的边界条件。使用
(^|_)
将查找 _
边界或字符串开头,与 EOS 类似:
grepl("(^|_)a(_|$)", c("a_", "_a_", "_a", "_aa_"))
# [1] TRUE TRUE TRUE FALSE
我们还需要将模式字符串分组为
(
组。我认为这意味着你的正则表达式应该看起来像这样:
"(^|_)?(HEMATOPOIETIC|ERYTHROCYTE|ERYTHROID|STEM|STEMNESS|HEMATOPOIESIS)(_|$)"
如果还有其他类似边界的字符,您可能希望将它们包含在那些书挡图案中。例如,如果边界可以是空格或下划线,那么您可以使用
"(^|[_ ])?(HEMATOPOIETIC|ERYTHROCYTE|ERYTHROID|STEM|STEMNESS|HEMATOPOIESIS)([_ ]|$)"
阿拉
txt <- c("REACTOME_NEURONAL_SYSTEM", "SOMETHING_STEM_ELSE", "STEM_QUUX")
grepl("(^|[_ ])?(HEMATOPOIETIC|ERYTHROCYTE|ERYTHROID|STEM|STEMNESS|HEMATOPOIESIS)([_ ]|$)", txt)
# [1] FALSE TRUE TRUE
使用您添加的数据:
gsea_obese <- c(
"RAMALHO_STEMNESS_UP",
"IVANOVA_HEMATOPOIESIS_INTERMEDIATE_PROGENITOR",
"BYSTRYKH_HEMATOPOIESIS_STEM_CELL_QTL_CIS",
"IVANOVA_HEMATOPOIESIS_EARLY_PROGENITOR",
"RIZ_ERYTHROID_DIFFERENTIATION",
"BYSTRYKH_HEMATOPOIESIS_STEM_CELL_AND_BRAIN_QTL_CIS",
"RIZ_ERYTHROID_DIFFERENTIATION_CCNE1",
"REACTOME_CYTOKINE_SIGNALING_IN_IMMUNE_SYSTEM",
"GOBP_ERYTHROCYTE_HOMEOSTASIS",
"REACTOME_NEURONAL_SYSTEM"
)
keep <- c("HEMATOPOIETIC", "ERYTHROCYTE", "ERYTHROID", "STEM", "STEMNESS", "HEMATOPOIESIS")
ptn <- paste0("(^|[ _])(", paste(keep, collapse = "|"), ")([ _]|$)")
ptn
# [1] "(^|[ _])(HEMATOPOIETIC|ERYTHROCYTE|ERYTHROID|STEM|STEMNESS|HEMATOPOIESIS)([ _]|$)"
stringr::str_detect(gsea_obese, ptn)
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE