This is probably really simple, but I can\'t find a solution:
df <- data.frame(replicate(10,sample(0:1,10,rep=TRUE)))
v <- c(3, 7)
i
Another way:
split(df, findInterval(1:nrow(df), v))
For the alternative interpretation, you can use:
split(df, cut(1:nrow(df), unique(c(1, v, nrow(df))), include.lowest=TRUE))
Assuming that rows 1&2
goes in the first split, 3,4,5,6
in the second and 7 to nrow(df)
goes in the last
split(df, cumsum(1:nrow(df) %in% v))
but if 1:3
rows are in the first split, then comes 4:7
, and in the third 8 to nrow(df)
split(df, cumsum(c(TRUE,(1:nrow(df) %in% v)[-nrow(df)])) )
Or as @James mentioned in the comments,
split(df, cumsum(1:nrow(df) %in% (v+1)))