R语言循环批量读取CSV文件失败问题求助
问题分析
你的循环只保留最后一年数据的核心问题有两个:
- 每次循环都执行
k <- c(),把存储结果的向量清空,之前年份的处理结果全被丢弃,最后只剩2021年的数据 t <- paste("text", i, sep="")这行完全无效,后续直接把t覆盖成了读取的数据框,这行代码可以删掉
修正后的循环代码
先初始化一个空向量存储所有结果,循环里每次把当前年份的处理结果追加进去:
# 初始化空向量存储最终结果 all_texts <- character(0) for (i in 2011:2021) { # 拼接文件名 file_name <- paste0("kbr_", i, ".csv") # 读取文件 df <- read.csv2(file_name, header = TRUE, sep = ";") # 去重并提取Full.context列(用$直接取向量,比[]更合适) unique_texts <- df$Full.context[!duplicated(df$Full.context)] # 转为字符型(如果该列本身是字符型可省略) unique_texts_chr <- as.character(unique_texts) # 追加到总向量中 all_texts <- c(all_texts, unique_texts_chr) } # 可选:对所有年份的合并结果做全局去重 all_texts_final <- unique(all_texts)
更简洁的R风格写法(推荐)
用lapply批量处理文件,代码更简洁不易出错:
# 生成所有文件名 file_names <- paste0("kbr_", 2011:2021, ".csv") # 批量处理每个文件 all_results <- lapply(file_names, function(file) { df <- read.csv2(file, header = TRUE, sep = ";") # 去重并转字符 as.character(df$Full.context[!duplicated(df$Full.context)]) }) # 合并所有结果为一个向量 all_texts <- unlist(all_results) # 可选:全局去重 all_texts_final <- unique(all_texts)
关键细节说明
- 用
paste0替代paste更高效,默认分隔符是空字符串,无需额外指定sep="" - 提取列时用
df$Full.context直接得到向量,比df["Full.context"]返回的单列数据框更方便后续处理 - 如果你的
Full.context列本身就是字符类型,as.character()可以直接省略
内容的提问来源于stack exchange,提问作者pindakazen
相关产品推荐
相关产品推荐

