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

从数据框列表中提取指定列拼接生成新数据框的实现方法

实现方案

1. Tidyverse 实现(代码简洁易读)

依赖purrr和dplyr工具包,适合大多数常规场景:

library(tidyverse)

# 替换下方df_list为你自己的dataframe列表名称
merged_df <- imap(df_list, ~{
  .x %>% 
    select(target_id, est_counts, tpm) %>%
    # 为列名添加对应列表索引标识
    rename_with(function(col) paste0("[[", .y, "]]_", col), c(est_counts, tpm))
}) %>% 
  # 按公共列target_id全量合并所有表
  reduce(full_join, by = "target_id")

如果需要匹配你示例中多级表头的展示效果,可以额外设置列名的层级属性:

col_parts <- str_split(colnames(merged_df), "_", simplify = TRUE)
colnames(merged_df) <- col_parts[,1]
attr(merged_df, "col.labels") <- col_parts[,2]

2. 纯基础R实现(无需安装第三方包)

# 替换下方df_list为你自己的dataframe列表名称
processed <- list()
for (i in seq_along(df_list)) {
  sub_df <- df_list[[i]][, c("target_id", "est_counts", "tpm")]
  colnames(sub_df)[2:3] <- paste0("[[", i, "]]_", colnames(sub_df)[2:3])
  processed[[i]] <- sub_df
}

# 迭代合并所有子表
merged_df <- Reduce(function(x, y) merge(x, y, by = "target_id", all = TRUE), processed)

性能优化方案(仅适用于所有表target_id完全对齐无缺失的场景)

当数据量很大时可以跳过合并匹配步骤,直接拼接列,运行速度提升数十倍:

target_col <- df_list[[1]]$target_id
value_cols <- do.call(cbind, lapply(df_list, function(x) x[, c("est_counts", "tpm")]))
colnames(value_cols) <- paste0("[[", rep(seq_along(df_list), each = 2), "]]_", c("est_counts", "tpm"))
merged_df <- cbind(data.frame(target_id = target_col), value_cols)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:39:04