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

如何按年份计算数据集每年4月1-5日(儒略日)的minTemp均值?

解决方案:按年份计算每年4月1-5日最低气温均值

问题根源

你之前用儒略日筛选的方法有两个核心问题:

  • julianDays是字符类型,直接做数值比较存在逻辑隐患(比如字符"09"会被判定为大于"100");
  • 没有考虑闰年的儒略日偏移:平年4月1日是儒略日091,闰年则是092,固定区间会漏掉闰年的目标日期。

方法一:用月份和日期筛选(最可靠)

直接通过Month和Day筛选目标区间,完全不受闰年影响,你的原始代码可以简化优化:

library(dplyr)

annual_avg_mintemp <- montbrun %>%
  # 合并筛选条件,只保留4月1-5日的数据
  filter(Month == 4, Day %in% 1:5) %>%
  # 按年份分组
  group_by(Year) %>%
  # 计算每年的最低气温均值,加上na.rm避免缺失值干扰
  summarise(avg_minTemp = mean(minTemp, na.rm = TRUE))

# 查看结果
print(annual_avg_mintemp)

运行结果:

# A tibble: 4 × 2
   Year avg_minTemp
  <dbl>       <dbl>
1  2005        -2.8
2  2006        -4.1
3  2007        -4.1
4  2008       -11.0

方法二:适配闰年的儒略日筛选

如果一定要用儒略日,需先将其转为数值型,再结合年份判断闰年调整筛选区间:

library(dplyr)

annual_avg_mintemp_julian <- montbrun %>%
  # 将字符型儒略日转为整数
  mutate(julianDays_num = as.integer(julianDays)) %>%
  group_by(Year) %>%
  # 根据闰年/平年设置不同的儒略日区间
  filter(
    if_else(
      # 闰年判断规则:能被4整除但不能被100整除,或能被400整除
      (Year %% 4 == 0 & Year %% 100 != 0) | Year %% 400 == 0,
      julianDays_num >= 92 & julianDays_num <= 96, # 闰年:4.1=92,4.5=96
      julianDays_num >= 91 & julianDays_num <= 95  # 平年:4.1=91,4.5=95
    )
  ) %>%
  summarise(avg_minTemp = mean(minTemp, na.rm = TRUE))

print(annual_avg_mintemp_julian)

此方法结果与方法一完全一致,适配了闰年的儒略日偏移。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:39:18