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

R语言合并文件夹文件时提取文件名中的受试者ID至新列

给合并后的CSV数据新增受试者ID列

你可以通过自定义读取函数,在读取每个文件时从文件名提取受试者ID,再将ID作为新列添加到对应文件的数据中,最后完成合并。以下是两种可行方案:

方案一:基于你现有的plyr包代码修改

保留你已加载的包,自定义读取函数实现ID提取与列添加:

library(plyr)
library(readr)

# 自定义函数:读取文件并添加受试者ID列
read_with_subject_id <- function(file_path) {
  # 提取纯文件名(去除路径)
  file_name <- basename(file_path)
  # 从文件名中提取ID(这里以上下划线分割取第一部分为例,对应你给出的181523_chance_day_speed格式)
  subject_id <- strsplit(file_name, "_")[[1]][1]
  # 读取文件并新增ID列
  data <- read_csv(file_path)
  data$subject_id <- subject_id
  return(data)
}

# 执行合并
combined_csv <- ldply(coo.files, read_with_subject_id)

如果你的文件名格式有变化,比如ID是固定位数的数字(比如6位),可以用正则提取更精准:

# 替换上述函数中的subject_id提取行,提取文件名开头的连续数字
subject_id <- stringr::str_extract(file_name, "^\\d+")
# 或者提取任意位置的6位数字
subject_id <- stringr::str_extract(file_name, "\\d{6}")

方案二:使用tidyverse工具链(更现代高效)

如果你愿意使用tidyverse的purrr包,代码会更简洁:

library(tidyverse)

combined_csv <- map_dfr(coo.files, function(file_path) {
  file_name <- basename(file_path)
  subject_id <- strsplit(file_name, "_")[[1]][1]
  # 读取文件并通过mutate新增ID列
  read_csv(file_path) %>% 
    mutate(subject_id = subject_id)
})

这两种方案都会让合并后的每条记录自动带上对应的受试者ID,完全匹配你需要的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:05:27