在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
相关产品推荐
相关产品推荐

