2014-01-21 41 views
1

我每天有不同的十進制數,並且想知道當您開始添加不同日期的百分比時,需要多少天才能達到1或高於1。計算達到某個點的數字總和

我的數據是這樣的:

 
days percentage 
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中做到這一點。謝謝!

+0

數據的預期結果是什麼?你是否正在談論從任何一連串的連續日子中累計達到1的值?或者不連續的隨機日子? – thelatemail

+0

@thelatemail累計。我有4000行,所以我需要找出R中的公式或代碼進行計算。 – Kangmin

+0

@Kangmin - 你應該使用dput()爲這些問題產生輸出。請參閱下面的答案,瞭解發佈數據的正確格式。 – John

回答

1

類似下面也許,它通過第一天的工作,以最大的一天,發現它需要多久才能達到>=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矢量給需要從開始點經過多少天,直至達到>=1的累積總和。

+0

我相信15的第一個值意味着下一個需要的值是向量中的15個槽。也就是第一個NA之前的16。 –

0

下面是數據:

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

這裏是做出來的功能。

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天超過累計百分比。