Мы можем циклически проходить по строкам, использовать rle
(чтобы найти, есть ли последовательные элементы) и создать логический индекс для подстановки «Имен»
df1$Name[apply(df1[-1], 1, function(x) {
rl <- rle(x==1)
any(rl$lengths[rl$values]>=2)})]
#[1] "B" "C" "D" "F"
Более быстрый подход можетбыть paste
элементами в каждой строке, а затем использовать регулярное выражение, чтобы найти, следует ли 1 за 1
df1$Name[grepl("(?<=1)1", do.call(paste0, df1[-1]), perl = TRUE)]
#[1] "B" "C" "D" "F"
data
df1 <- structure(list(Name = c("A", "B", "C", "D", "E", "F"), `2000` = c(1L,
0L, 1L, 1L, 0L, 0L), `2001` = c(0L, 0L, 1L, 1L, 1L, 1L), `2002` = c(0L,
1L, 0L, 1L, 0L, 0L), `2003` = c(1L, 1L, 0L, 1L, 1L, 1L), `2004` = c(0L,
0L, 1L, 1L, 0L, 1L), `2005` = c(1L, 1L, 1L, 0L, 1L, 1L)), .Names = c("Name",
"2000", "2001", "2002", "2003", "2004", "2005"), class = "data.frame",
row.names = c(NA, -6L))