Использование dplyr
в одну сторону - filter
Строки окончания операций из данных, group_by
Indx
и sum
значения Operation2
, которые происходят между последним появлением, когда Operation1
равен 1 допоследний рядМы находим последнее вхождение 1, используя значение cumsum
.
library(dplyr)
df %>%
filter(Operation1 != -1) %>%
group_by(Indx) %>%
summarise(Oplength = sum(Operation2[cumsum(Operation1 == 1) ==
max(cumsum(Operation1 == 1))]))
# A tibble: 2 x 2
# Indx Oplength
# <int> <int>
#1 1 137
#2 2 92
Или другой способ найти последнее вхождение - использовать which
и max
df %>%
filter(Operation1 != -1) %>%
group_by(Indx) %>%
summarise(Oplength = sum(Operation2[max(which(Operation1 == 1)) : n()]))
данные
df <- structure(list(Indx = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L), Operation1 = c(1, 0.5, 0, 1, 0.5,
1, 0.5, -1, 1, 0, 0.5, 0, 0.5, 1, 0.5, 0, -1), Operation2 = c(450L,
84L, 48L, 4L, 4L, 123L, 14L, 45L, 471L, 47L, 44L, 145L, 78L,
71L, 19L, 2L, 45L)), class = "data.frame", row.names = c(NA, -17L))