You need to enable JavaScript to run this app. R语言如何从列表内的dataframe名称中提取数字并写入对应列?
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何从列表内的dataframe名称中提取数字并写入对应列?

解决方案

核心问题说明

你之前代码的问题在于sapply直接遍历列表时,传入匿名函数的x是列表存储的dataframe本身,无法直接获取到列表元素对应的名称,自然无法提取名称中的日期字段。你写的x[8]实际是取dataframe的第8列,完全不符合提取名称字符的需求。

推荐实现方法

方法1:purrr包实现(代码更简洁)

如果可以使用tidyverse体系的purrr包,用imap函数可以同时遍历列表的元素值和对应名称,是容错率最高的方案:

library(purrr)
library(stringr)

list.data <- imap(list.data, function(df, df_name){
  # 从名称中提取下划线后的8位日期数字,适配前缀长度不固定的场景
  date_str <- str_extract(df_name, "(?<=_)\\d{8}")
  df$Date <- as.numeric(date_str)
  return(df)
})

如果确认所有列表名称的日期都固定在第7到14位字符位置,也可以替换成固定位置取字符的写法:

date_str <- substr(df_name, 7, 14)

方法2:基础R实现(无需额外安装包)

用索引遍历列表,同时取对应位置的名称和dataframe即可:

for(i in seq_along(list.data)){
  # 取当前元素的名称
  df_name <- names(list.data)[i]
  # 提取日期
  date_str <- regmatches(df_name, regexpr("(?<=_)\\d{8}", df_name, perl=TRUE))
  list.data[[i]]$Date <- as.numeric(date_str)
}

结果验证

处理完成后可以用以下代码抽查结果是否正确:

# 对比第一个dataframe的名称和对应Date列值
names(list.data)[1]
head(list.data[[1]]$Date)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 14:54:04