Разделение фреймов данных и их рекомбинация в соответствии с последовательностью из 3-х может достичь ваших целей:
df1_split <- split(df1, rep(1:(nrow(df1)/3), each = 3))
df2_split <- split(df2, rep(1:(nrow(df1)/3), each = 3))
r1 <- do.call(rbind, lapply(seq_along(df1_split), function(i) rbind(df2_split[[i]], df1_split[[i]])))
# col1 col2 col3
#1 x 9 TRUE
#2 y 10 FALSE
#3 z 4 TRUE
#4 x 12 TRUE
#5 y 9 FALSE
#6 z 8 FALSE
#42 x 12 FALSE
#52 y 1 FALSE
#62 z 2 TRUE
#41 x 1 FALSE
#51 y 2 TRUE
#61 z 10 FALSE
#7 x 8 TRUE
#8 y 3 TRUE
#9 z 7 TRUE
#71 x 5 TRUE
#81 y 7 FALSE
#91 z 11 FALSE
#10 x 5 FALSE
#11 y 11 FALSE
#12 z 6 TRUE
#101 x 3 FALSE
#111 y 6 FALSE
#121 z 4 FALSE
Другой вариант - напрямую объединить два набора данных и, следовательно, реорганизовать порядок строк в желаемой последовательности.следующим образом:
S <- seq(3, nrow(df2)+nrow(df1), by = 6)
seqDF2 <- unlist(Map(seq, S-2, S))
seqDF1 <- setdiff(1:(nrow(df2)+nrow(df1)), seqDF2)
r2 <- rbind(df2, df1)[match(1:(nrow(df2)+nrow(df1)), c(seqDF2, seqDF1)),]
Это должно дать тот же результат, что и r1
rownames(r1) <- 1:nrow(r1)
rownames(r2) <- 1:nrow(r2)
identical(r1, r2)
##[1] TRUE