如何从数据框中提取同时含有MYB和ERF基序的基因
提取同时拥有MYB和ERF基序的基因
给定数据框:
df <- data.frame(genes= c("A", "B", "C", "D", "E", "F", "A", "B", "C"), motifs = c("MYB", "MYB", "MYB", "ERF", "ERF", "ERF", "ERF", "ERF", "ERF"))
方法1:使用dplyr包(tidyverse风格)
通过分组后检查每个基因的基序集合是否包含目标值,自动筛选符合条件的基因:
library(dplyr) target_motifs <- c("MYB", "ERF") result_genes <- df %>% group_by(genes) %>% filter(all(target_motifs %in% motifs)) %>% distinct(genes) %>% pull(genes) result_genes # 输出:[1] "A" "B" "C"
方法2:使用base R
无需额外安装包,通过分组检查实现筛选:
target_motifs <- c("MYB", "ERF") # 按基因拆分基序列表 gene_motifs <- split(df$motifs, df$genes) # 筛选出包含所有目标基序的基因 result_genes <- names(gene_motifs)[sapply(gene_motifs, function(x) all(target_motifs %in% x))] result_genes # 输出:[1] "A" "B" "C"
方法3:使用data.table包(适合大数据量)
如果基因列表极长,data.table的处理效率更优:
library(data.table) setDT(df) target_motifs <- c("MYB", "ERF") result_genes <- df[, .(has_all = all(target_motifs %in% motifs)), by = genes][has_all == TRUE, genes] result_genes # 输出:[1] "A" "B" "C"
以上方法均无需手动指定基因名称,会自动遍历所有基因并筛选出同时拥有两种基序的结果。
内容的提问来源于stack exchange,提问作者Ujjal
相关产品推荐
相关产品推荐

