基于文件名日期区分读取不同格式CSV的R语言需求
按文件版本差异读取CSV数据
问题背景
我有一批CSV格式的气象数据文件,路径如下:
"F:/IMGW/2010/B00300S_2010_12.csv" "F:/IMGW/2014/B00300S_2014_12.csv" "F:/IMGW/2015/B00300S_2015_12.csv" "F:/IMGW/2016/B00300S_2016_12.csv" "F:/IMGW/2017/B00300S_2017_12.csv" "F:/IMGW/2018/B00300S_2018_12.csv" "F:/IMGW/2019/B00300S_2019_12.csv" "F:/IMGW/2020/B00300S_2020_12.csv" "F:/IMGW/2021/B00300S_2021_12.csv" "F:/IMGW/2022/B00300S_2022_12.csv" "F:/IMGW/2023/B00300S_2023_12.csv" "F:/IMGW/2024/B00300S_2024_06.csv"
原本使用以下代码构建文件列表并批量读取数据:
构建文件列表
rok <- c(2010,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024) B.list.1 <- lapply (rok, function (rok) { dir_ls(paste0(sciezka, "/", rok), regexp = paste0("B00300S_", rok, ".*csv$")) }) B00300S_flist <- do.call (rbind, B.list)
批量读取文件
All <- lapply(B00300S_flist,function(i){ read.csv(i, header=FALSE, sep=";", dec = ",", na.strings = "***", skipNul = TRUE) }) B00300S_multi <- do.call (plyr::rbind.fill, All)
但从2024_06的文件开始,文件格式发生变化:新增表头行,小数分隔符从逗号改为点。需要根据文件名判断格式,选择对应的读取参数。
解决方案
修改批量读取的代码,在lapply的匿名函数中加入条件判断,根据文件名匹配结果选择读取参数:
All <- lapply(B00300S_flist, function(i) { # 判断是否为2024年6月及以后的文件 if (grepl("2024_06|2024_0[7-9]|2024_[1-2][0-9]", i)) { # 新格式:带表头、小数分隔符为点 read.csv(i, header=TRUE, sep=";", dec = ".", na.strings = "***", skipNul = TRUE) } else { # 旧格式:无表头、小数分隔符为逗号 read.csv(i, header=FALSE, sep=";", dec = ",", na.strings = "***", skipNul = TRUE) } }) B00300S_multi <- do.call(plyr::rbind.fill, All)
说明
- 正则表达式
2024_06|2024_0[7-9]|2024_[1-2][0-9]可以匹配2024年6月到12月的所有文件,后续新增2024年下半年的文件无需修改代码。 - 如果仅需针对
2024_06单独处理,可简化判断条件为grepl("2024_06", i)。
内容的提问来源于stack exchange,提问作者GrBa
相关产品推荐
相关产品推荐

