如何在R环境中仅导入行数超过9行的CSV文件
筛选行数超过9行的CSV文件导入R环境
你可以通过先判断文件行数再决定是否导入,或者读取后筛选保留两种方式实现,下面给你两种实用的写法:
方法1:先快速统计行数再导入(效率更高,适合大量文件)
这种方式不用完整读取所有文件,先通过count.fields快速统计行数,筛选出符合条件的文件后再正式读取,适合几百个文件的场景:
# 获取所有CSV文件的完整路径 csv_files <- list.files(pattern = "\\.csv$", full.names = TRUE) # 筛选出行数>9的文件路径 valid_files <- csv_files[sapply(csv_files, function(file) { # count.fields统计行数,减1是排除表头(如果你的CSV没有表头可以去掉-1) length(count.fields(file, sep = ",")) - 1 > 9 })] # 提取文件名(去掉后缀和路径)用于命名数据框 valid_filenames <- gsub("\\.csv$", "", basename(valid_files)) # 循环导入并命名为独立数据框 for(i in seq_along(valid_files)){ df <- read.csv(valid_files[i]) assign(valid_filenames[i], df) }
方法2:读取后再筛选保留(逻辑更直观)
如果你不在意先读取所有文件的开销,也可以直接基于你原有的代码修改,只加一行判断逻辑:
filenames <- gsub("\\.csv$", "", list.files(pattern = "\\.csv$")) for(i in filenames){ df <- read.csv(paste(i, ".csv", sep = "")) # 仅保留行数超过9行的数据框 if(nrow(df) > 9){ assign(i, df) } }
小提示
- 用
assign创建大量全局数据框后期管理会麻烦,建议把符合条件的数据框放到列表里,后续分析更便捷:df_list <- setNames(lapply(valid_files, read.csv), valid_filenames) # 调用单个数据框用 df_list$文件名 - 如果CSV文件的分隔符不是逗号,记得在
read.csv里指定sep参数,比如制表符分隔的话用sep = "\t"。
内容的提问来源于stack exchange,提问作者MustachAsh
相关产品推荐
相关产品推荐

