You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从数据框中提取同时含有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:54:52