You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言新手求助:如何筛选3个数据框中的共同值并生成表格?

找出三个R数据框的共有值并生成表格

嘿,作为R语言新手,要搞定三个数据框的共有值提取其实很直观,我给你分步骤说明,附完整示例代码:

第一步:明确数据结构假设

假设你的三个数据框都有一列用来存储目标值(比如基因名p53PTEN),这一列的列名统一为gene(如果列名不同,后面会说明怎么调整)。

第二步:构造示例数据(你可以替换成自己的数据)

先模拟三个带基因名的数据框,方便你测试:

# 创建示例数据框
df1 <- data.frame(gene = c("p53", "PTEN", "KRAS", "MYC"), expression = c(2.1, 1.5, 3.0, 2.7))
df2 <- data.frame(gene = c("p53", "PTEN", "EGFR", "BRAF"), expression = c(1.8, 1.2, 2.5, 3.1))
df3 <- data.frame(gene = c("p53", "PTEN", "ALK", "HER2"), expression = c(2.0, 1.4, 2.8, 3.2))

第三步:提取共有值并生成表格

方法1:基础R实现(无需额外包)

intersect()函数嵌套,依次取三个集合的交集,再转成表格形式:

# 获取三个数据框共有的基因名
common_values <- intersect(intersect(df1$gene, df2$gene), df3$gene)

# 转成简单表格
common_table_basic <- data.frame(shared_genes = common_values)

方法2:用dplyr包生成带完整信息的表格

如果你想保留共有值在三个数据框中的对应信息(比如基因表达量),用inner_join()逐步合并,只保留所有数据框都存在的行:

# 先安装并加载dplyr包(如果没装过的话)
# install.packages("dplyr")
library(dplyr)

# 三次内连接,只保留三个数据框共有的基因及对应信息
common_table_full <- df1 %>%
  inner_join(df2, by = "gene") %>%
  inner_join(df3, by = "gene")

关键注意事项

  • 如果你的数据框列名不一致(比如df1是gene_name,df2是gene_id),需要调整inner_joinby参数:by = c("gene_name" = "gene_id")
  • 如果数据框中有重复值,先对目标列去重:unique(df1$gene),再进行交集操作

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

火山引擎 最新活动