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

如何遍历数据框列表并将名称数字部分设为数据框新列值?

解决方案

问题描述

我有一个数据框列表,列表元素名称分别为"data frame - 12345 - App"、"data frame - 34567 - App"、"data frame - 65849",每个数据框结构如下:

Col1|Col2 |Col3
Row1 Info1 NewInfo1
Row2 Info2 NewInfo2

需要将每个列表元素名称中的数字提取出来,作为新列ID Name添加到对应数据框的每一行,最终得到带ID列的数据框。

实现代码

方法1:使用tidyverse工具(推荐)

先模拟数据框列表(如果已有真实列表可跳过这步):

# 构造示例数据框
df <- data.frame(
  Col1 = c("Row1", "Row2"),
  Col2 = c("Info1", "Info2"),
  Col3 = c("NewInfo1", "NewInfo2")
)

# 构造目标列表
df_list <- list(
  "data frame - 12345 - App" = df,
  "data frame - 34567 - App" = df,
  "data frame - 65849" = df
)

使用purrr::imap遍历列表,同时获取数据框和对应名称,提取数字并添加新列:

library(purrr)
library(stringr)

df_list_with_id <- imap(df_list, function(df, list_name) {
  # 从列表名称中提取连续数字
  id <- str_extract(list_name, "\\d+")
  # 添加ID Name列
  df$`ID Name` <- id
  df
})

# 查看第一个数据框的结果
print(df_list_with_id[[1]])

方法2:基础R循环

如果不想加载额外包,用基础R也能实现:

df_list_with_id <- df_list

for (name in names(df_list_with_id)) {
  # 提取名称中的数字部分
  id <- regmatches(name, regexpr("\\d+", name))
  # 为当前数据框添加ID列
  df_list_with_id[[name]]$`ID Name` <- id
}

说明

  • 正则表达式\\d+会匹配名称中所有连续的数字,不管数字前后的文本格式如何,都能准确提取目标ID。
  • 两种方法都会保留原列表的结构,每个数据框都会新增ID Name列,值对应列表名称中的数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:00:15