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

在R语言中查找累积和(cumsum)最小值对应的日期方法

解决方案:找到累积和最小值对应的日期

嘿,我来帮你完善这个需求!首先先修正你初始数据生成里的小细节——runif()的参数顺序是n, min, max,你原来的写法把样本量n放在了最后,会导致报错,先把这部分改对:

set.seed(123)
dat <- data.frame(
  day = 1:365,
  rain = runif(n = 365, min = 0, max = 5),  # 修正参数顺序
  tmean = runif(n = 365, min = 15, max = 33)  # 修正参数顺序
) %>% 
  mutate(
    mean.daily.rain = mean(rain),
    mean.daily.tmean = mean(tmean)
  ) %>% 
  mutate(
    rain.acc = rain - mean.daily.rain,
    tmean.acc = tmean - mean.daily.tmean
  )

接下来,你已经用which.min(cumsum(rain.acc))得到了索引329,但要获取对应的日期(也就是day列的具体值),可以用以下几种灵活的方式:

1. 单独获取rain.acc累积和最小值的日期

你可以直接在summarise里提取对应位置的day值,或者用slice定位到目标行再取值:

# 方法1:在summarise中直接匹配对应日期
dat %>% 
  summarise(min_rain_acc_day = day[which.min(cumsum(rain.acc))])

# 方法2:用slice定位到最小值所在行,再筛选日期列
dat %>% 
  mutate(rain_cumsum = cumsum(rain.acc)) %>% 
  slice(which.min(rain_cumsum)) %>% 
  select(day)

两种方法都会返回day = 329,和你之前得到的索引完全对应。

2. 同时获取rain.acc和tmean.acc累积和最小值的日期

如果想一次性拿到两个指标对应的日期,只需要在summarise里添加另一行计算即可:

dat %>% 
  summarise(
    min_rain_acc_day = day[which.min(cumsum(rain.acc))],
    min_tmean_acc_day = day[which.min(cumsum(tmean.acc))]
  )

用set.seed(123)的固定随机种子运行后,你会得到min_tmean_acc_day = 163,同时拿到两个结果。

额外小技巧

如果需要同时查看累积和的具体最小值以及对应日期的偏差值,可以扩展slice的用法,保留更多字段:

# 查看rain.acc累积和最小值的完整信息
dat %>% 
  mutate(rain_cumsum = cumsum(rain.acc)) %>% 
  slice(which.min(rain_cumsum)) %>% 
  select(day, rain_cumsum, rain.acc)

这样就能直观看到该日期的累积和数值以及对应的降水偏差啦。

内容的提问来源于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.20 11:47:44