R语言新手求助:如何筛选3个数据框中的共同值并生成表格?
找出三个R数据框的共有值并生成表格
嘿,作为R语言新手,要搞定三个数据框的共有值提取其实很直观,我给你分步骤说明,附完整示例代码:
第一步:明确数据结构假设
假设你的三个数据框都有一列用来存储目标值(比如基因名p53、PTEN),这一列的列名统一为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_join的by参数:by = c("gene_name" = "gene_id") - 如果数据框中有重复值,先对目标列去重:
unique(df1$gene),再进行交集操作
内容的提问来源于stack exchange,提问作者Sumit Siddharth




