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

R语言循环读取指定CSV文件仅获最后一个文件,求排查解决

解决R循环读取CSV仅保留最后一个文件的问题

嘿,我来帮你搞定这个问题!你的代码问题很明确:每次循环都在覆盖同一个变量mydata。当你执行mydata <- data.frame(read.csv(x[i]))时,每一次迭代都会把之前存在mydata里的数据替换掉,所以循环结束后自然只剩下最后一次读取的004.csv的数据啦。

下面给你两种常用的解决方案,根据你的需求来选:

方案1:将每个文件的数据存储为列表(推荐,方便单独处理单个文件)

这种方式会把每个CSV文件的数据单独存在列表的一个元素里,后续你可以轻松调用任意一个文件的数据:

# 先筛选出所有CSV文件,避免读取非CSV文件
file_list <- list.files(pattern = "\\.csv$")
# 初始化一个空列表用来存储数据
mydata_list <- list()

# 循环读取每个文件并存入列表
for (i in 1:length(file_list)) {
  mydata_list[[i]] <- read.csv(file_list[i])
  # 给列表元素加上文件名,方便后续识别调用
  names(mydata_list)[i] <- file_list[i]
}

之后你可以通过mydata_list[["001.csv"]]或者mydata_list[[1]]来调用第一个文件的数据,非常灵活。

方案2:合并所有文件为一个大的数据框(适合所有文件结构一致的情况)

如果你的所有CSV文件列名、列结构都完全相同,想把它们合并成一个整体的数据框,可以这么做:

方法一:用循环逐步合并

file_list <- list.files(pattern = "\\.csv$")
# 先读取第一个文件作为初始数据
mydata <- read.csv(file_list[1])

# 从第二个文件开始循环合并
for (i in 2:length(file_list)) {
  temp_data <- read.csv(file_list[i])
  mydata <- rbind(mydata, temp_data)
}

方法二:用lapply+do.call更简洁高效

R里的函数式编程可以让代码更简洁,尤其是文件数量多的时候:

file_list <- list.files(pattern = "\\.csv$")
# 一次性读取所有文件并合并
mydata <- do.call(rbind, lapply(file_list, read.csv))

另外补充个小建议:原来的list.files()可能会读取目录下的非CSV文件,加上pattern = "\\.csv$"可以确保只获取后缀为.csv的文件,避免出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:53:25