как подмножествовать каждые 6 строк в R?

#r #filter

#r #Фильтр

Вопрос:

Я должен каждый раз подмножествовать данные из 6 строк. Как это сделать в R?

 data:
col1 : 1,2,3,4,5,6,7,8,9,10
col2 : a1,a2,a3,a4,a5,a6,a7,a8,a9,a10
  

Я хочу делать подмножество из 6 строк каждый раз. Первое подмножество строк будет иметь 1: 6, следующее подмножество строк будет иметь 7: nrow (данные). Я пробовал использовать seq функцию.

 seqData <- seq(1,nrow(data),6)
output: It is giving 1 and 7th row but I want 1 to 6 rows first, next onwards 7 to nrow(data).
  

Как получить такой вывод.

Ответ №1:

Будет ли это работать:

 set.seed(1)
dat <- data.frame(c1 = sample(1:5,12,T),
                  c2 = sample(1:5,12,T))
dat
   c1 c2
1   1  2
2   4  2
3   1  1
4   2  5
5   5  5
6   3  1
7   2  1
8   3  5
9   3  5
10  1  2
11  5  2
12  5  1
split(dat, rep(1:ceiling(nrow(dat)/6), each = 6))
$`1`
  c1 c2
1  1  2
2  4  2
3  1  1
4  2  5
5  5  5
6  3  1

$`2`
   c1 c2
7   2  1
8   3  5
9   3  5
10  1  2
11  5  2
12  5  1
  

Комментарии:

1. Простое решение. Спасибо

Ответ №2:

Приведенная ниже функция создает числовой вектор с целыми числами, увеличивающимися на 1 единицу каждые n строк. И использует этот вектор для разделения данных по мере необходимости.

 data <- data.frame(col1 = 1:10, col2 = paste0("a", 1:10))

split_nrows <- function(x, n){
  f <- c(1, rep(0, n - 1))
  f <- rep(f, length.out = NROW(x))
  f <- cumsum(f)
  split(x, f)
}
split_nrows(data, 6)
  

Ответ №3:

Вот простой пример с mtcars, который выдает список из 6 подмножеств dfs.

 nrows <- nrow(mtcars)
breaks <- seq(1, nrows, 6)
listdfs <- lapply(breaks, function(x) mtcars[x:(x 5), ]) # increment by 5 not 6

listdfs[[6]] <- listdfs[[6]][1:2, ] #last df: remove 4 NA rows (36 - 32)