Сумма конкретного диапазона в R - PullRequest
0 голосов
/ 27 января 2019

Я хочу суммировать столбец A, используя столбец B в качестве критерия.

A B C

1
2
3
4 ИСТИНА 10

5
6
7 ИСТИНА 18

8
9
10 ИСТИНА 27

10 в столбце C - сумма (1,2,3,4) 18 сумма (5,6,7) 27 сумма (10,9,8)

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Та же функция ave, но другая идея получить групповую функцию.

ave(df1$A,cumsum(c(F,diff(df1$B)==-1)),FUN=cumsum)
 [1]  1  3  6 10  5 11 18  8 17 27
0 голосов
/ 27 января 2019

Простое применение ave с группами, определенными переменной, вычисляемой с помощью трюка cumsum, сделает то, что вы хотите.

ave(df1$A, rev(cumsum(rev(df1$B))), FUN = cumsum)
#[1]  1  3  6 10  5 11 18  8 17 27

Данные.

df1 <- read.table(text = "
A B C
1 FALSE 1
2 FALSE 3
3 FALSE 6
4 TRUE 10
5 FALSE 5
6 FALSE 11
7 TRUE 18
8 FALSE 8
9 FALSE 17
10 TRUE 27                  
", header = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...