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

R语言多数据框取交集后如何按存在条件筛选目标基因

多数据框基因存在情况筛选方案

核心思路是先把列表里的数据框合并成长表,再转换成每个基因一行、每个数据框一列的宽表,用布尔值标记基因在对应数据框是否存在,之后直接按列的布尔组合做筛选即可,能覆盖所有你需要的场景,比之前用min/max判断的方法灵活度高很多,不管有多少个数据框都能用。


测试数据

library(tidyverse)
df1 = data.frame(genes = c('gene1', 'gene3', 'gene4', 'gene2','gene11'))
df2 = data.frame(genes = c('gene3', 'gene2', 'gene5', 'gene1', "genet",'gene11'))
df3 = data.frame(genes = c('gene6', 'gene3', 'gene4', 'gdene7','gene11', 'genex', "gene10"))
dfList <- list(df1, df2, df3) 

第一步:预处理生成基因存在标记表

先把长表转成宽表,用TRUE标记基因存在,FALSE标记不存在,替代原来的数字/NA值,后续判断逻辑更清晰:

gene_presence <- dfList %>% 
  bind_rows(.id="df") %>% 
  mutate(is_present = TRUE) %>% 
  pivot_wider(
    names_from = df, 
    names_prefix = "df", 
    values_from = is_present, 
    values_fill = FALSE
  )

处理完的表结构如下,每一行对应一个基因,三列df1/df2/df3直接标记存在状态:

# A tibble: 11 × 4
   genes  df1   df2   df3  
   <chr>  <lgl> <lgl> <lgl>
 1 gene1  TRUE  TRUE  FALSE
 2 gene3  TRUE  TRUE  TRUE 
 3 gene4  TRUE  FALSE TRUE 
 4 gene2  TRUE  TRUE  FALSE
 5 gene11 TRUE  TRUE  TRUE 
 6 gene5  FALSE TRUE  FALSE
 7 genet  FALSE TRUE  FALSE
 8 gene6  FALSE FALSE TRUE 
 9 gdene7 FALSE FALSE TRUE 
10 genex  FALSE FALSE TRUE 
11 gene10 FALSE FALSE TRUE 

各场景筛选代码

  • 筛选同时存在于三个数据框的基因
    直接判断三列均为TRUE即可:

    gene_presence %>% 
      filter(df1, df2, df3) %>% 
      pull(genes)
    

    运行结果:[1] "gene3" "gene11"

  • 筛选存在于指定两个数据框的基因(以仅存在于df1、df2为例)
    判断目标两个数据框标记为TRUE,其余数据框标记为FALSE:

    gene_presence %>% 
      filter(df1, df2, !df3) %>% 
      pull(genes)
    

    运行结果:[1] "gene1" "gene2"
    如果不需要排除第三个数据框,只要基因同时在df1和df2存在即可,不管是否在df3出现,直接去掉!df3的判断条件就行。

  • 筛选仅存在于单个指定数据框的基因(以仅存在于df2为例)
    判断目标数据框标记为TRUE,其余所有数据框标记为FALSE:

    gene_presence %>% 
      filter(!df1, df2, !df3) %>% 
      pull(genes)
    

    运行结果:[1] "gene5" "genet"
    你之前用min/max方法筛选仅在df3存在的基因,用这个逻辑写就是filter(!df1, !df2, df3),跑出来的结果和你之前得到的gdene7、gene10、gene6、genex完全一致。


内容的提问来源于stack exchange,提问作者PesKchan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:45:38