我有两个载体.第一个包含代表年度能源需求的值.它的长度为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,以此类推.

作为输出,我需要一个包含最终实现的年能源yields 的载体,理想情况下还需要一个显示相应年份使用了yield.vec中的哪些值的载体.因此,对于第一年,值将是428011.69755,因为它是sum(yield.vec[1:452])的结果并且大于demand.vec[1].在这种情况下,第二输出载体的第一个值将是452,因为需要尽可能多的值.第二个实现的值是409118.77503sum(yield.vec[453:887])的结果大于408392.因此,第二输出载体的第二个值将是435,因为需要尽可能多的值等等.

有人有 idea 吗?

推荐答案

获取yield 率载体的指数

tmp <- 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

要获得与之前结果的差异,您可以这样做

> c(tmp[1],diff(tmp))
 [1] 452 435 416 397 379 360 341 321 301 281 261 240 219 198 176 154 133 111  89  67  45  22

R相关问答推荐

如何判断R中一列的值是否在所有其他列中重复?

如何在热图中绘制一个图形,但在每个单元格中通过饼形图显示?

以R为基数排列奇数个图

在值和NA的行顺序中寻找中断模式

保存包含循环和ifelse的函数的输出

如何按排序顺序打印一个框架中所有精确的唯一值?

从R导出全局环境中的所有sf(numrames)对象

基于多列将值链接到NA

R函数‘paste`正在颠倒其参数的顺序

DEN扩展包中的RECT树形图出现异常行为

为左表中的所有行使用值Fill滚动左连接

列名具有特殊字符时的循环回归

R如何将列名转换为更好的年和月格式

R中的类别比较

扩展R中包含列表的数据框

根据r中另一个文本列中给定的范围对各列求和

R中治疗序列的相对时间指数

Ggplot2如何找到存储在对象中的残差和拟合值?

为什么不能使用lApply在包装函数中调用子集

重写时间间隔模糊连接以减少内存消耗