Один из вариантов - создать последовательность по 'index', а затем split
данные по 'grp', созданные
library(tidyverse)
df1 %>%
group_by(index) %>%
mutate(grp = row_number()) %>%
split(.$grp)
или с помощью base R
, используйте ave
длясоздайте последовательность и выполните split
grp <- with(df1, ave(seq_along(index), index, FUN = seq_along))
split(df1, grp)
#$`1`
# barcode index
#1 XPO21451 a
#4 XPO21454 b
#5 XPO21503 c
#7 XPO21506 1
#10 XPO21463 2
#$`2`
# barcode index
#2 XPO21546 a
#6 XPO21457 c
#8 XPO21460 1
#$`3`
# barcode index
#3 XPO21500 a
#9 XPO21509 1
data
df1 <- structure(list(barcode = c("XPO21451", "XPO21546", "XPO21500",
"XPO21454", "XPO21503", "XPO21457", "XPO21506", "XPO21460", "XPO21509",
"XPO21463"), index = c("a", "a", "a", "b", "c", "c", "1", "1",
"1", "2")), class = "data.frame", row.names = c("1", "2", "3",
"4", "5", "6", "7", "8", "9", "10"))