Кумулятивные суммы разных окон времени с несколькими условиями в R - PullRequest
0 голосов
/ 24 октября 2018

Я хочу вычислить кумулятивные суммы временных окон на 3 и 7 дней с условиями для очень большого фрейма данных.

Это пример моего фрейма данных:

Date     X   
1.1.18   0   
2.1.18   0   
3.1.18   0   
4.1.18   NA   
5.1.18   0.3   
6.1.18   NA 
7.1.18   0   
8.1.18   NA  
9.1.18   NA 
10.1.18  NA
11.1.18  0
12.1.18  0.9
13.1.18  0.2
14.1.18  0.2
15.1.18  NA
16.1.18  0.3 

Совокупные суммы должны рассчитываться на основе столбца X.Условия:

(1) Если все значения X временного окна равны NA -> CumSum должен быть равен NA.

(2) Если все значения X временного окнаравны 0 -> CumSum должно быть 0.

(3) Если значения X временного окна равны 0 или NA -> CumSum должно быть NA.

(4)Если все значения X временного окна> 0 ->, значения должны быть суммированы.

(5) Если все значения X временного окна либо> 0, либо NA ->, значения должны бытьсуммировано.

(6) Если все значения Х временного окна равны> 0 или 0 -> значения должны быть суммированы.

Результат должен выглядеть следующим образом:

Date     X    3CumSumX   7CumSumX   
1.1.18   0       NA         NA
2.1.18   0       NA         NA 
3.1.18   0       NA         NA
4.1.18   NA      0          NA
5.1.18   0.3     NA         NA   
6.1.18   NA      0.3        NA
7.1.18   0       0.3        NA  
8.1.18   NA      0.3        0.3
9.1.18   NA      NA         0.3
10.1.18  NA      NA         0.3
11.1.18  0       NA         0.3
12.1.18  0.9     NA         0.3
13.1.18  0.2     0.9        0.9
14.1.18  0.2     1.1        1.1
15.1.18  NA      1.3        1.3
16.1.18  0.3     0.4        1.3

Пока у меня есть следующий код, но условия (1) и (3) здесь не выполняются:


data$`3CumSumX` <- NA     # column for 3 days cumulative values
data$`7CumSumX` <- NA     # column for 7 days cumulative values

data[17,] <- NA         # additional row for cumulative values

data[4:17,3] <- rollapply(data[1:16,2], width=3, FUN=sum, na.rm=TRUE)
data[8:17,4] <- rollapply(data[1:16,2], width=7, FUN=sum, na.rm=TRUE)

К сожалению, я до сих пор не знаю, как включитьмои условия, поэтому любая помощь будет оценена.

...