Используя R, вы можете создать функцию, которая будет возвращать выбранные номера строк.
get_rows <- function(VALUE) {
ind <- which(VALUE == 1)[1]
if ((ind + 2) <= length(VALUE) && all(VALUE[c(ind + 1,ind + 2)] == 0))
sort(c(which(VALUE[seq_len(ind + 2)] == 0), ind))
else 0
}
и применять ее для каждого FIRM
.
library(dplyr)
df %>% group_by(FIRM) %>% slice(get_rows(VALUE))
# FIRM YEAR VALUE
# <fct> <int> <int>
#1 A 2007 0
#2 A 2008 0
#3 A 2009 0
#4 A 2010 1
#5 A 2011 0
#6 A 2012 0
данные
df <- structure(list(FIRM = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor"),
YEAR = c(2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2009L,
2010L, 2011L, 2010L, 2011L, 2012L), VALUE = c(0L, 0L, 0L,
1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L)), class = "data.frame",row.names = c(NA, -12L))