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

使用R语言从月度CSV文件计算1km网格单元平均温度的技术求助

用R批量处理月度温度CSV计算网格单元平均温度

任务分解步骤

  • 环境准备与文件路径获取
  • 定义单文件处理函数(解决坐标列不参与计算、列数不一致问题)
  • 批量处理所有文件并合并结果
  • 可选:计算网格单元的跨月度总平均

具体实现代码

1. 加载依赖包并设置工作目录

library(dplyr)
library(readr)

# 替换为你的CSV文件所在文件夹路径
setwd("/path/to/your/csv/files")

2. 获取所有CSV文件路径

# 匹配所有.csv结尾的文件,获取完整路径
csv_files <- list.files(pattern = "\\.csv$", full.names = TRUE)

3. 定义单文件处理函数

这个函数会自动适配不同列数的文件,跳过前两列坐标,计算每个网格单元的月度平均温度:

process_temp_file <- function(file_path) {
  # 读取文件,自动识别所有列(适配不同天数的月份)
  df <- read_csv(file_path, show_col_types = FALSE)
  
  # 计算每行(单个网格)的月度平均温度,跳过前两列坐标
  df <- df %>%
    mutate(avg_monthly_temp = rowMeans(select(., 3:ncol(.)), na.rm = TRUE)) %>%
    select(1:2, avg_monthly_temp) # 仅保留坐标和月度平均温度
  
  # 添加文件名作为月份标识,方便后续追踪
  df$source_file <- basename(file_path)
  
  return(df)
}

4. 批量处理所有文件

# 批量处理所有CSV,得到每个文件的月度平均结果列表
monthly_avg_list <- lapply(csv_files, process_temp_file)

# 将所有月度结果合并为一个数据框
combined_monthly_avg <- bind_rows(monthly_avg_list)

5. 可选:计算网格单元的跨336个月总平均

如果需要得到每个网格单元在所有时间段的平均温度,执行以下代码:

grid_total_avg <- combined_monthly_avg %>%
  group_by(across(1:2)) %>% # 按前两列坐标分组
  summarise(total_avg_temp = mean(avg_monthly_temp, na.rm = TRUE)) %>%
  ungroup()

关键问题解决说明

  • 前两列坐标不参与计算:通过select(., 3:ncol(.))精准选取温度数据列,排除前两列坐标后再计算行平均。
  • 列数不一致问题:利用ncol(.)动态获取当前文件的列数,不管是28/29/30/31天的月份,都能自动适配温度列的范围。
  • 缺失值处理:rowMeans和mean中加入na.rm = TRUE,避免因部分日期温度缺失导致平均结果失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:12:06