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

如何用循环批量给MSEL数据集添加标识列并合并

批量合并MSEL数据集的简化方案

方案1:基础for循环实现

先加载所需工具包,再按以下流程处理:

# 加载必要包
library(readr)
library(dplyr)

# 获取所有符合命名规则的CSV文件路径
file_list <- list.files(pattern = "^msel.*\\.csv$")  # 仅匹配msel开头的CSV文件

# 初始化空列表存储处理后的数据集
data_list <- list()

# 遍历每个文件进行处理
for (file in file_list) {
  # 读取当前文件数据
  df <- read_csv(file)
  
  # 剥离文件名后缀,提取核心名称
  core_name <- gsub("\\.csv$", "", file)
  
  # 分割核心名称获取subsc和period值
  split_parts <- strsplit(core_name, "_")[[1]]
  subsc_val <- split_parts[1]
  period_val <- split_parts[2]
  
  # 添加标识列
  df <- df %>%
    mutate(subsc = subsc_val,
           period = period_val)
  
  # 将处理好的数据存入列表
  data_list[[file]] <- df
}

# 合并所有数据集
msel_all <- bind_rows(data_list)

方案2:tidyverse管道式实现(更简洁高效)

如果熟悉tidyverse生态,用purrr的映射函数可以一步完成遍历与合并,代码更紧凑:

library(tidyverse)

# 批量读取、处理并合并所有数据
msel_all <- list.files(pattern = "^msel.*\\.csv$") %>%
  map_df(function(file) {
    read_csv(file) %>%
      mutate(
        # 提取subsc:移除文件名中"_"及之后的所有内容(含后缀)
        subsc = str_remove(file, "_.*\\.csv$"),
        # 提取period:提取"_"之后、".csv"之前的内容
        period = str_extract(file, "(?<=_).*(?=\\.csv$)")
      )
  })

关键细节说明

  • list.files(pattern = "^msel.*\\.csv$"):精准筛选目标文件,避免读取无关数据
  • 正则表达式提取逻辑:
    • str_remove(file, "_.*\\.csv$"):直接剥离文件名中_及后续内容,得到完整分量表标识(如mselcomp)
    • str_extract(file, "(?<=_).*(?=\\.csv$)"):通过正向断言提取阶段标识(如t1、yr2)
  • 两种方案最终都会生成包含所有样本、且带有subsc(分量表)和period(发展阶段)标识列的合并数据集msel_all

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:53:22