#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)