如何用tidyverse函数创建增量不超incr的累积求和新列?
使用tidyverse生成受限增量的累积列
我希望用tidyverse函数创建一个新数据列,使其累加值等于现有列的累积和,但每次增量不超过incr。
初始示例数据
incr <- 1.5 df <- data.frame(a = c(6,0,0,2.5,0,0)) df a 1 6.0 2 0.0 3 0.0 4 2.5 5 0.0 6 0.0
预期输出
需要基于incr生成新列b,结果如下:
a b 1 6.0 1.5 2 0.0 1.5 3 0.0 1.5 4 2.5 1.5 5 0.0 1.5 6 0.0 1.0
我试过用tidyr::uncount(),但它不支持非整数增量;也尝试过mutate结合向量化函数,还考虑过rowwise(),但多数思路都需要迭代。
可以用排队下载来类比这个需求:列a代表各时间点的下载请求(比如第1次请求6MB,第4次请求2.5MB),incr是下载速度上限(1.5MB/周期),列b就是每个周期的实际下载量,直到所有请求都完成。
第二个示例数据
incr <- 1.5 df <- data.frame(a = rep(0,100),b=rep(0,100)) df$a[c(30,33,38)] = c(6,2.5,1) df[30:39,] a b 30 6.0 0 31 0.0 0 32 0.0 0 33 2.5 0 34 0.0 0 35 0.0 0 36 0.0 0 37 0.0 0 38 1.0 0 39 0.0 0
对应预期输出
a b 30 6.0 1.5 31 0.0 1.5 32 0.0 1.5 33 2.5 1.5 34 0.0 1.5 35 0.0 1.0 36 0.0 0.0 37 0.0 0.0 38 1.0 1.0 39 0.0 0.0
内容的提问来源于stack exchange,提问作者Joseff Kolman
相关产品推荐
相关产品推荐

