对一个向量的值求和,直到达到另一个向量的值

问题描述 投票:0回答:1

我有两个向量。第一个包含代表年度能源需求的值。它的长度为22,代表22年。第二个要大得多,包含按降序排列的能源产量值。

这是一些复制代码:

# create demand vector
demand.vec <- c(427839, 408392, 388944, 369497.652793, 350050, 330603, 311155, 291708, 272261, 252814, 233366, 213919, 
                194472, 175025, 155577, 136130, 116683, 97236,  77788,  58341,  38894, 19447)

# create yield vector
set.seed(10)
yield.vec <- sort(runif(n = 10500, min = 800, max = 950), decreasing= T)

现在的目标是每年总结

yield.vec
所需的尽可能多的值,以至少达到相应年份的能源需求。这意味着在第一年,应将
yield.vec
中的许多值相加,以达到
427839
。在第二年,应将
yield.vec
的剩余值相加,以便达到
408392
,依此类推。

作为输出,我需要一个包含最终实现的年度能源产量的向量,理想情况下还需要一个向量来显示相应年份使用的

yield.vec
值。因此,第一年的值将为
428011.69755
,因为它是
sum(yield.vec[1:452])
的结果并且大于
demand.vec[1]
。在这种情况下,第二个输出向量的第一个值将是
452
,因为需要尽可能多的值。第二个实现的值将是
409118.77503
,即
sum(yield.vec[453:887])
的结果,它大于
408392
。因此,第二个输出向量的第二个值将是
435
,因为需要尽可能多的值,依此类推。

有人有想法吗?

r
1个回答
0
投票

获取产量向量的索引

> sapply(cumsum(demand.vec),\(x){which.max(x<=cumsum(yield.vec))})
 [1]  452  887 1303 1700 2079 2439 2780 3101 3402 3683 3944 4184 4403 4601 4777 4931 5064 5175
[19] 5264 5331 5376 5398
© www.soinside.com 2019 - 2024. All rights reserved.