gpt4 book ai didi

r - 在 R 中的 cumsum 函数中生成最小值

转载 作者:行者123 更新时间:2023-12-04 23:37:24 24 4
gpt4 key购买 nike

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

如果我想找到一年中哪一天的累积值 rain.acctmean.acc是我能做到的最低限度:
dat %>% summarise(which.min(cumsum(rain.acc)))
329

dat %>% summarise(which.min(cumsum(tmean.acc)))
159

但是,我想施加一个条件,即我只想查看 doy >= 213 和 <= 365,即如何提取 213 和 365 之间的年份中的最低值 cumsum(rain.acc)cumsum(tmean.acc) .请注意 cumsum必须在全年计算。

最佳答案

使用 ifelse() 将过滤器应用于可能的值

fun = function(x, i, min, max)
which.min(cumsum(x) * ifelse(i >= min & i <= max, 1, NA))


> fun(dat$tmean.acc, dat$day, 213, 365)
[1] 248

或者
> dat %>% summarize(
rain.min = fun(rain.acc, day, 213, 365),
tmean.min = fun(tmean.acc, day, 213, 365)
)
rain.min tmean.min
1 329 248

或者
> filter(dat, row_number() == fun(tmean.acc, day, 213, 365))
day rain tmean mean.daily.rain mean.daily.tmean rain.acc tmean.acc
1 248 4.846782 15.39589 2.4938 24.03155 2.352982 -8.635665

关于r - 在 R 中的 cumsum 函数中生成最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com