Это не отвечает на ваш реальный вопрос, но выполняет работуПеред созданием подмножества данных используйте data.table::rleid
для создания индексной переменной.
df$idx <- data.table::rleid(df$type)
# or without data.table package
# rle_type <- rle(df$type)
# df$idx <- rep(seq_len(length(rle_type$lengths)), rle_type$lengths)
df
# cb type idx
#1 1 short 1
#2 2 g_long 2
#3 3 g_long 2
#4 4 bg_long 3
#5 5 bg_long 3
#6 6 bg_long 3
#7 7 g_long 4
#8 8 g_long 4
#9 9 bg_long 5
#10 10 bg_long 5
Подмножество, а затем split
ваши данные в idx
.
bg_df <- df[df$type == 'bg_long',]
split(bg_df, bg_df$idx)
#$`3`
# cb type idx
#4 4 bg_long 3
#5 5 bg_long 3
#6 6 bg_long 3
#$`5`
# cb type idx
#9 9 bg_long 5
#10 10 bg_long 5
Для удалениястолбец idx:
lapply(bg_lst, `[<-`, "idx", value = NULL)
Если вам нужны эти два набора данных в вашей глобальной среде, выполните
bg_lst <- setNames(bg_lst, paste0("bg_df", 1:2))
list2env(bg_lst, .GlobalEnv)