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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:52:10