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

基于参考数据框对多站点年日降雨数据框求和

解决方法:按站点年份的指定日期区间汇总降雨量

首先先确认你的模拟降雨数据生成代码,我稍微调整了参数写法让逻辑更清晰:

set.seed(123)
# 生成10个站点、10年(2001-2010)的逐日降雨数据
df <- data.frame(
  loc.id = rep(1:10, each = 10*365),
  years = rep(rep(2001:2010, each = 365), times = 10),
  day = rep(rep(1:365, times = 10), times = 10),
  rain = runif(n = 10*10*365, min = 0, max = 35)
)

接下来构造你的参考数据框df.ref,这里我假设index2为300(你可以直接替换成实际业务中的日期值):

# 构造参考数据框:每个站点每年对应一个日期区间(index1到index2)
df.ref <- data.frame(
  loc.id = rep(1:10, each = 10),
  years = rep(2001:2010, times = 10),
  index1 = rep(250, times = 10*10),
  index2 = rep(300, times = 10*10) # 替换为你的实际index2数值
)

下面提供两种实现指定区间降雨量求和的方案:

方法1:使用dplyr(简洁直观)

先加载dplyr包,通过连接数据框、过滤日期区间、分组求和完成需求:

library(dplyr)

# 合并数据框→过滤日期区间→分组计算降雨量总和
rain_sum <- df %>%
  inner_join(df.ref, by = c("loc.id", "years")) %>%
  filter(day >= index1, day <= index2) %>%
  group_by(loc.id, years, index1, index2) %>%
  summarise(total_rain = sum(rain), .groups = "drop")

# 查看前6行结果
head(rain_sum)

方法2:使用Base R(无需额外包)

如果不想加载第三方包,可以用base R的原生函数实现:

# 合并两个数据框
merged_df <- merge(df, df.ref, by = c("loc.id", "years"))

# 筛选出日期在指定区间内的数据
filtered_df <- merged_df[merged_df$day >= merged_df$index1 & merged_df$day <= merged_df$index2, ]

# 按站点、年份和区间分组求和
rain_sum_base <- aggregate(rain ~ loc.id + years + index1 + index2, data = filtered_df, sum)
names(rain_sum_base)[names(rain_sum_base) == "rain"] <- "total_rain"

# 查看前6行结果
head(rain_sum_base)

两种方案最终都会输出每个站点每年对应日期区间的降雨量总和,结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:40