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

从嵌套文件夹多CSV提取指定行并转换为时间序列数据集

嵌套CSV提取指定雨量站时间序列解决方案

问题拆解

你当前的代码不仅存在语法错误,还未实现核心的站点筛选与时间序列转换逻辑——需要从嵌套文件夹的409个单月CSV中,提取指定雨量站的每日数据,最终生成带时间戳的标准DataFrame。

分步实现代码

1. 递归获取所有CSV文件路径

用list.files的递归参数扫遍嵌套文件夹,确保不漏掉任何文件:

# 递归获取所有CSV的完整路径
csv_files <- list.files("station_data", pattern = "\\.csv$", full.names = TRUE, recursive = TRUE)

2. 定义单CSV处理函数

每个CSV对应单月数据,需完成站点筛选、时间戳生成、宽格式转长格式三个核心操作(以下代码假设CSV第一列为站点IDstation_id,文件名含202301类年月标识,前几列为站点属性,后续为day1到dayN的日雨量列,可根据你的实际格式调整):

library(tidyverse)
library(lubridate)

process_month_csv <- function(file_path, target_station) {
  # 读取CSV,关闭列类型提示简化输出
  month_data <- read_csv(file_path, show_col_types = FALSE)
  
  # 筛选目标站点行,无匹配则返回空表并告警
  target_row <- month_data %>% filter(station_id == target_station)
  if (nrow(target_row) == 0) {
    warning(paste("站点", target_station, "在文件", basename(file_path), "中未找到"))
    return(tibble())
  }
  
  # 从文件名提取年月并转换为日期格式
  year_month <- str_extract(basename(file_path), "\\d{6}") %>% ymd()
  
  # 拆分站点属性与日雨量数据,将宽格式雨量转为长格式
  station_attr <- target_row %>% select(station_id, lon, lat, elevation) # 按实际列名调整
  daily_rain <- target_row %>% 
    select(starts_with("day")) %>% 
    pivot_longer(everything(), names_to = "day_tag", values_to = "rainfall")
  
  # 生成完整日期并合并属性与雨量数据
  daily_rain %>%
    mutate(day_num = as.integer(str_remove(day_tag, "day")),
           date = year_month + days(day_num - 1)) %>%
    select(-day_tag, -day_num) %>%
    bind_cols(station_attr)
}

3. 批量处理并合并结果

指定目标站点ID,批量处理所有CSV后按日期排序:

# 替换为你需要提取的站点ID
target_station_id <- "ST001"

# 批量处理所有CSV并合并为最终DataFrame
final_rain_df <- map_dfr(csv_files, ~process_month_csv(.x, target_station_id))

# 按日期升序排列
final_rain_df <- final_rain_df %>% arrange(date)

4. 验证结果结构

用glimpse检查最终表的格式,预期包含station_id、经纬度、海拔(可选)、date、rainfall列:

glimpse(final_rain_df)

关键适配提示

  • 若文件名年月格式为2023-01,将str_extract的正则改为"\\d{4}-\\d{2}"
  • 若日雨量列直接用日期命名(如2023-01-01),将select(starts_with("day"))替换为select(-station_id, -lon, -lat, -elevation)(排除属性列后剩余均为雨量列)
  • 若不同CSV中站点属性不一致,建议单独维护一份站点信息表,避免从雨量CSV中提取属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:23:25