Je dois sous-définir les données de 6 lignes à chaque fois. Comment faire ça en R?
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).
Je veux faire un sous-ensemble de 6 lignes à chaque fois. Le premier sous-ensemble des lignes aura 1: 6, le sous-ensemble suivant des lignes aura 7: nrow (données). J'ai essayé d'utiliser la fonction seq
.
data: col1 : 1,2,3,4,5,6,7,8,9,10 col2 : a1,a2,a3,a4,a5,a6,a7,a8,a9,a10
Comment obtenir une sortie comme ça.
3 Réponses :
La fonction ci-dessous crée un vecteur numérique avec des entiers augmentant de 1 unité toutes les n lignes. Et utilise ce vecteur pour diviser les données selon les besoins.
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)
Est-ce que ça va marcher:
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
Solution simple. Merci
Voici un exemple simple avec mtcars qui donne une liste de 6 sous-ensembles de 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)