Мы можем split
столбец в list
и cbind
n <- 30000
out <- do.call(cbind, split(df1$ID, as.integer(gl(nrow(df1), n, nrow(df1)))))
Если split
не имеют одинаковую длину, мы можем использовать cbind.fill
из rowr
library(rowr)
out <- do.call(cbind.fill, split(df1$ID, as.integer(gl(nrow(df1), n, nrow(df1)))))