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
相关产品推荐
相关产品推荐

