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

如何仅基于共有行名合并20个行列数不同的dataframe

基于共有行名合并多个DataFrame(仅保留共有行)

你需要合并20个行列数不同的DataFrame,只保留所有DataFrame共有的行名对应的行,以下是两种高效的实现方法:

方法一:Base R 原生实现

步骤说明

  1. 把所有需要合并的DataFrame放到一个列表中(批量处理的核心)
  2. 提取所有DataFrame共有的行名
  3. 对每个DataFrame仅保留这些共有行
  4. 按行合并所有处理后的DataFrame

示例代码

# 构造你的示例数据
df1 <- data.frame(
  Patient1 = c(28,92,1,0,22),
  Patient64 = c(38,11,10,76,1002),
  Patient472 = c(0,998,282,56,778),
  row.names = c("ABC","XYZ","WWE","ICQ","SQL")
)

df2 <- data.frame(
  Pat_9 = c(65,3,2,2,12),
  Pat_1 = c(44,311,1110,760,1200),
  Pat_111 = c(874,998,282,56,778),
  row.names = c("ABC","CBA","WWE","vVv","GHG")
)

# 把所有需要合并的df放进列表(如果命名有规律,比如df1到df20,可用mget(paste0("df",1:20)))
df_list <- list(df1, df2)

# 提取所有df共有的行名
common_rows <- Reduce(intersect, lapply(df_list, rownames))

# 每个df只保留共有行(drop=FALSE避免单行列转成向量)
filtered_dfs <- lapply(df_list, function(x) x[common_rows, , drop = FALSE])

# 合并结果
merged_result <- do.call(cbind, filtered_dfs)

# 查看结果
print(merged_result)

运行后会得到你需要的合并结果:

Patient1 Patient64 Patient472 Pat_9 Pat_1 Pat_111
ABC      28        38          0    65    44     874
WWE       1        10        282     2  1110     282

方法二:Tidyverse 工具链实现

如果习惯用tidyverse的语法,代码会更简洁:

library(tidyverse)

# 构造示例数据并把行名转为列
df1 <- data.frame(
  Patient1 = c(28,92,1,0,22),
  Patient64 = c(38,11,10,76,1002),
  Patient472 = c(0,998,282,56,778),
  row.names = c("ABC","XYZ","WWE","ICQ","SQL")
) %>% rownames_to_column("gene")

df2 <- data.frame(
  Pat_9 = c(65,3,2,2,12),
  Pat_1 = c(44,311,1110,760,1200),
  Pat_111 = c(874,998,282,56,778),
  row.names = c("ABC","CBA","WWE","vVv","GHG")
) %>% rownames_to_column("gene")

# 放入列表
df_list <- list(df1, df2)

# 批量合并(inner_join自动保留所有df共有的gene)
merged_result <- df_list %>% reduce(inner_join, by = "gene") %>% column_to_rownames("gene")

# 查看结果
print(merged_result)

两种方法都支持批量处理20个DataFrame,只需要把所有df都加入到df_list中即可,不需要逐个手动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:09:21