Если нам также нужны строки NA, создайте группу с cumsum
в столбце «study.name», который будет пустым (или NA
)
library(dplyr)
DF %>%
group_split(grp = cumsum(lag(study.name == "", default = FALSE)), keep = FALSE)
Или с base R
split(DF, cumsum(c(FALSE, head(DF$study.name == "", -1))))
Или с NA
i1 <- rowSums(is.na(DF))== ncol(DF)
split(DF, cumsum(c(FALSE, head(i1, -1))))
Или на основе 'b'
DF1 <- DF[setdiff(seq_len(nrow(DF)), b), ]
split(DF1, as.character(DF1$study.name))