R语言循环读取文件时为DataFrame添加文件名列的报错修正
修正R循环读取文件并添加文件名列的代码
原代码存在三个核心问题:
- 每次循环直接覆盖
df变量,最终只会保留最后一个文件的数据 - 给
file_name列赋值时索引逻辑错误:当前读取的数据集是单个文件的全部内容,不需要用dummy_variable做切片,直接给整列赋值即可 dummy_variable的更新逻辑错误,应该累加总行数而非替换为当前文件的行数
修正后的基础循环代码
# 初始化空的总数据框,用于存储所有文件的数据 total_df <- data.frame() for (file in files) { # 读取单个文件 current_df <- read.delim(paste('FOLDER/', file, sep=''), sep='\t', header = FALSE) # 给当前文件的数据集添加文件名列,所有观测对应同一个文件名 current_df$file_name <- file # 将当前文件的数据追加到总数据框中 total_df <- rbind(total_df, current_df) }
更高效的替代方案(用purrr包)
如果追求代码简洁和运行效率,可以使用purrr的map_dfr函数自动合并结果:
library(purrr) library(dplyr) total_df <- map_dfr(files, function(file) { read.delim(paste('FOLDER/', file, sep=''), sep='\t', header = FALSE) %>% mutate(file_name = file) })
说明
- 两种方式都会给每个文件的所有观测行添加对应的文件名
- 基础循环方式适合新手理解,
map_dfr方式避免了手动rbind的低效,代码更简洁
内容的提问来源于stack exchange,提问作者RNewbie
相关产品推荐
相关产品推荐

