j'aimerais extraire des sous-df dans certains cas, pour n'obtenir que des df de 4 lignes max ; les df de base allant de 1 à 8 lignes.
Par exemple, pour un df de 7 lignes, cela me ferait un sub de 4 et un sub de 3, ou l'inverse, peu importe. Pour 5, 3 et 2 etc...
J'ai essayé le code suivant, mais il est très lourd et peu efficace, car je suis obligée de passer à la main le nombre de lignes que je souhaite :
Code : Tout sélectionner
l1 <- data.frame("id"=c(1,1,1,2,2,3,3,3,3,3), "trip" = c(1,2,3,1,2,1,2,3,4,5))
l2 <- data.frame("id"=c(1,1,1,2,2,3,3,3,3,3), "trip" = c(1,2,3,1,2,1,2,3,4,5),"file" = c("fileA","fileB","fileC","fileD","fileE","fileF","fileG","fileH","fileI","fileJ"))
for (i in 1:nrow(l1)) {
id <- l1$id[i]
trip <- l1$trip[i]
trip.tab <- l2[which(l2$id ==id & l2$trip == trip),]
if (nrow(trip.tab) > 4) {
j <- 1
n <- 1
trip.tab_2 <- trip.tab
while (j <= (nrow(trip.tab))+4) {
trip.tab <- trip.tab_2[c(j:(j+2)),] #erreur si le nbr de lignes n'est pas un multiple de 3
#suite du script...
j <- j+3
n <- n+1
}
} else {
#suite du script
}
}
J'ai aussi essayé 3 if imbriqués :
Code : Tout sélectionner
if (nrow(trip.tab) <= 4) {
} else {
if (nrow(trip.tab) == 5 | nrow(trip.tab) == 6) {
trip.tab1 <- trip.tab[1:3,]
trip.tab2 <- trip.tab[4:nrow(trip.tab),]
} else {
if (nrow(trip.tab) == 7 | nrow(trip.tab) == 8) {
trip.tab1 <- trip.tab[1:3,]
trip.tab2 <- trip.tab[4:6,]
trip.tab3 <- trip.tab[7:nrow(trip.tab),]
}
}
}
Mais c'est très très lourd (mais ça tourne ^^)
Je me demandais si il y avait une option dans la fonction subset permettant d'intégrer un pas variable, mais je ne trouve pas.
En vous remerciant pour votre aide précieuse,
L.