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

如何按年按月正确汇总CSV中prtotAdjust列的降雨量数据?

问题分析与解决方案

你的汇总结果异常,核心原因是数据读取时的列数不匹配,可能伴随header参数设置不当,导致数据错位,prtotAdjust列混入大量无关数值,最终总和失真。

具体问题点

  1. 列数不匹配:你的样本数据仅包含4列(An、Mois、Jour、prtotAdjust),但代码中指定了5列的col.names(包含tasAdjust),这会导致读取时将下一行的第一个字段填充到tasAdjust列,数据完全错位,prtotAdjust列被错误赋值。
  2. header参数错误:如果skip=48后的第一行是数据而非表头,设置header=TRUE会将该行数据识别为列名,进一步加剧数据错位。

修正后的代码

基础版(使用aggregate)

# 读取数据:匹配实际列数,确认header参数
data <- read.csv2('./data.csv', 
                  header = FALSE,  # 若skip后第一行是数据则设为FALSE;如果是表头则设为TRUE
                  sep = ";", 
                  dec = ".",
                  skip = 48,
                  col.names = c("An", "Mois", "Jour", "prtotAdjust"),
                  colClasses = c("factor", "factor", "factor", "numeric"))

# 按年份+月份汇总降雨量
aggregate(prtotAdjust ~ An + Mois, data, sum, na.rm = TRUE)

简洁版(使用dplyr)

如果习惯tidyverse风格,用dplyr更直观:

library(dplyr)

data <- read.csv2('./data.csv', 
                  header = FALSE,
                  sep = ";", 
                  dec = ".",
                  skip = 48,
                  col.names = c("An", "Mois", "Jour", "prtotAdjust"),
                  colClasses = c("factor", "factor", "factor", "numeric"))

# 分组汇总
monthly_total <- data %>%
  group_by(An, Mois) %>%
  summarise(total_rainfall = sum(prtotAdjust, na.rm = TRUE), .groups = "drop")

print(monthly_total)

验证步骤

在汇总前,务必先检查读取的数据是否正确:

head(data)

确认prtotAdjust列的数值与你提供的样本数据一致,再执行汇总操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:05:33