如何用list.files筛选读取2010-2015年的air_temp温度数据文件?
解决方案:读取指定年份的温度数据文件
这里提供两种简洁的实现方式,都能精准读取2010-2015年的文件:
方法一:用正则表达式直接匹配目标文件
修改list.files的pattern参数,精准匹配文件名格式为air_temp.2010到air_temp.2015的文件,无需额外筛选步骤:
# 列出2010-2015年的目标文件 target_files <- list.files(pattern = "^air_temp\\.201[0-5]$") # 保留原有的数据读取函数 read_udel <- function(file_path){ d <- read.fwf(file_path, widths = rep(8, 15)) names(d) <- c("long", "lat", month.abb, "mean") return(d) } # 批量读取目标文件 read_all <- lapply(target_files, read_udel)
正则说明:^air_temp\\.201[0-5]$ 表示文件名必须以air_temp.开头,后跟2010-2015的年份(201[0-5]匹配2010、2011…2015),且无其他多余字符。
方法二:先列所有文件再筛选年份
如果需要更灵活的年份范围调整,可以先列出所有文件,再提取年份进行筛选:
# 列出所有air_temp开头的文件 all_files <- list.files(pattern = "air_temp.*") # 提取文件名中的年份并筛选2010-2015年的文件 # 从文件名第10位开始取4个字符(对应年份部分),转为数字后判断范围 target_files <- all_files[as.integer(substr(all_files, 10, 13)) %in% 2010:2015] # 调用读取函数批量读取 read_udel <- function(file_path){ d <- read.fwf(file_path, widths = rep(8, 15)) names(d) <- c("long", "lat", month.abb, "mean") return(d) } read_all <- lapply(target_files, read_udel)
如果偏好使用for循环,也可以这样实现:
# 初始化空列表存储数据 read_all <- list() # 遍历目标文件逐个读取 for(i in seq_along(target_files)){ read_all[[i]] <- read_udel(target_files[i]) # 可选:给列表元素命名为对应年份 names(read_all)[i] <- substr(target_files[i], 10, 13) }
内容的提问来源于stack exchange,提问作者crawling_ec
相关产品推荐
相关产品推荐

