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

使用R的tidyverse循环批量处理多CSV文件:日期转季节

批量处理CSV文件并导出转换后数据的实现方法

先修正原代码的关键问题

你的原代码没有先将UDATE转换为日期格式,lubridate的year()/month()/day()函数需要输入日期类型才能正常工作,所以第一步要先把字符串格式的dd-mm-yyyy转成日期对象。

完整批量处理实现步骤

1. 加载依赖包

先确保安装并加载所需的R包:

# 安装包(首次运行需要)
install.packages(c("dplyr", "lubridate", "readr"))

# 加载包
library(dplyr)
library(lubridate)
library(readr)

2. 获取所有目标CSV文件路径

指定存放CSV文件的目录(比如"./data/",根据你的实际路径修改),获取所有CSV文件的完整路径:

# 获取目录下所有csv文件的路径
csv_files <- list.files(path = "./data/", pattern = "\\.csv$", full.names = TRUE)

3. 编写单个文件的处理函数

把读取、日期转换、生成季节的逻辑封装成函数,方便批量调用:

process_csv <- function(file_path) {
  # 读取CSV文件
  data <- read_csv(file_path)
  
  # 转换日期格式+拆解年/月/日+生成季节
  processed_data <- data %>%
    # 将dd-mm-yyyy格式的字符串转为日期对象
    mutate(UDATE = dmy(UDATE)) %>%
    mutate(
      year = year(UDATE),
      month = month(UDATE),
      day = day(UDATE),
      # 根据月份映射季节(注意这里month是数值型,不用加引号)
      season = case_when(
        month %in% 3:6 ~ "Summer",
        month %in% 7:10 ~ "Monsoon",
        month %in% c(11,12,1,2) ~ "Winter"
      )
    )
  
  return(processed_data)
}

4. 批量处理并导出文件

用循环遍历所有文件,处理后导出为新的CSV(比如在原文件名后加_processed区分):

# 遍历每个文件处理并导出
for (file in csv_files) {
  # 处理文件
  processed_data <- process_csv(file)
  
  # 生成导出文件名:原文件名去掉.csv,加上_processed.csv
  output_file <- sub("\\.csv$", "_processed.csv", file)
  
  # 导出处理后的数据
  write_csv(processed_data, output_file)
  
  # 可选:打印处理完成提示
  cat("已处理并导出文件:", output_file, "\n")
}

补充说明

  • 如果你的CSV文件编码特殊(比如GBK),可以在read_csv里加locale = locale(encoding = "GBK")参数调整。
  • 如果需要将所有处理后的数据合并成一个大文件,可以在循环后用bind_rows()合并:
# 批量处理所有文件并合并
all_processed_data <- lapply(csv_files, process_csv) %>% bind_rows()
# 导出合并后的文件
write_csv(all_processed_data, "./all_processed_data.csv")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:20:22