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

R语言从不等列数的dataframe列表提取名称与列名生成新dataframe

R语言实现多数据框列表提取名称与列名的最优方案

需求说明

从已命名的多dataframe列表中,提取每个数据框的名称、对应列名,整合为统一dataframe,不同数据框列数不一致时自动补NA。

实现方案

方案1:tidyverse简洁实现(代码可读性高,适配后续拓展需求)

依赖包:tidyverse(核心用到purrr、tibble、dplyr)

library(tidyverse)

# 示例数据
dlist <- list(mtcars[1:2], mtcars[1:3], mtcars[1:4])
names(dlist) <- c("mtcars1", "mtcars2", "mtcars3")

# 核心代码
result <- dlist |>
  # 同时遍历列表元素和对应名称
  imap_dfr(~{
    # 把当前数据框的列名转为单行数据框
    as_tibble_row(colnames(.x), .name_repair = ~paste0("col_", seq_along(.x))) |>
      # 把数据框名放在第一列
      mutate(df_name = .y, .before = 1)
  })

运行后输出的result完全匹配预期,打印效果如下:

# A tibble: 3 × 5
  df_name col_1 col_2 col_3 col_4
  <chr>   <chr> <chr> <chr> <chr>
1 mtcars1 mpg   cyl   NA    NA   
2 mtcars2 mpg   cyl   disp  NA   
3 mtcars3 mpg   cyl   disp  hp   

方案2:base R实现(无第三方包依赖,运行速度快)

# 计算所有数据框的最大列数,用于补全NA
max_col <- max(lengths(dlist))

result <- do.call(rbind, lapply(names(dlist), function(nm) {
  # 提取当前数据框列名,长度不足自动补NA
  cols <- `length<-`(colnames(dlist[[nm]]), max_col)
  c(nm, cols)
})) |> as.data.frame(row.names = NULL)

方案说明

  • 两种方案都不需要提前手动对齐列数,自动适配任意长度的列名差异
  • 若需要修改输出列名,直接修改生成列名的逻辑即可,比如把paste0("col_", seq_along(.x))替换为自定义命名规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 00:03:02