计算数字的总和以达到某个点

我每天有不同的十进制数,想知道从不同日子开始添加百分比时,您需要多less天才能达到1或高于1。

我的数据如下所示:

天百分比
 1 0.187207822
 2 0.221165007
 3 0.002773814
 4 0
 5 0
 6 0.159115287
 7 0
 8 0
 9 0
 10 0.080871794
 11 0.080299951
 12 0.011975184
 13 0
 14 0.197308657
 15 0.272780872
 16 0.167274086
 17 0.142972819
 18 0.07437692
 19 0
 20 0
 21 0
 22 0.079398371
 23 0.075284697
 24 0
 25 0
 26 0.06247718
 27 0
 28 0
 29 0.167250066
 30 0.189849856
 31 0.048080715
 32 0
 33 0.024319067
 34 0.031437684
 35 0.083643198

当你开始不同的日子,你将需要不同的日子达到1或更高。 我想知道如何在R或Excel中做到这一点。 谢谢!

也许像下面的东西,在第一天到最大的一天工作,find需要多长时间才能达到>=1的累计和:

 result <- sapply( dat$days, function(x) which(cumsum(dat$percentage[x:length(dat$percentage)]) >= 1)[1] ) result # [1] 15 14 15 14 13 12 12 11 10 9 12 12 11 10 15 16 NA NA NA NA NA NA NA #[24] NA NA NA NA NA NA NA NA NA NA NA NA 

正如下面的@MatthewLundberg所指出的那样, result向量表示从起始点开始需要经过多less天,直到达到>=1的累积和。

这里是数据:

 dat = structure(list(days = 1:35, percentage = c(0.187207822, 0.221165007, 0.002773814, 0, 0, 0.159115287, 0, 0, 0, 0.080871794, 0.080299951, 0.011975184, 0, 0.197308657, 0.272780872, 0.167274086, 0.142972819, 0.07437692, 0, 0, 0, 0.079398371, 0.075284697, 0, 0, 0.06247718, 0, 0, 0.167250066, 0.189849856, 0.048080715, 0, 0.024319067, 0.031437684, 0.083643198)), .Names = c("days", "percentage"), class = "data.frame", row.names = c(NA, -35L)) 

这是一个解决这个问题的function。

 find_cumsum = function(df, day){for(i in nrow(df)){ df = df[df$days >= day,] return(min(df$days[cumsum(df$percentage) >= 1])) } } find_cumsum(dat , 3) 

这个函数需要data.frame和你想要开始的那一天。 它返回你达到1或更大累计和的那一天。 例如,如果您在第3天开始跑步(如图所示),您将在第17天超出累计百分比。