sélection de données dans un data frame

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

naima oumouhou
Messages : 34
Enregistré le : 04 Mar 2008, 13:39

sélection de données dans un data frame

Messagepar naima oumouhou » 10 Fév 2009, 14:22

Bonjour tout le monde,

J'ai un souci avec de la sélection de données dans R.
voilà ce que je souhaiterais faire:

J'ai un data frame comme celui ci:
Tab1:
jours jourscum val
L1 NA NA 100
L2 8 8 300
L3 5 13 400
L4 3 16 500
L5 10 26 600

la colonne jour correspond à la différence de jours entre 2 dates observées.
La colonne jourscum correspond au cumul de la colonne jours.
La colonne valeur correspond à des valeurs observées.
Je souhaiterais retenir le tableau pour lequel j'ai au min 7 jours entre les valeurs soit le tableau suivant:
tab2:
jours jourscum val
NA NA 100
8 8 300
3 16 500
10 26 600

Je retiens la 1ère ligne du tableau 1.
Entre L1 et L2, j'ai 8 jours d'écart donc je retiens L2.
Entre L2 et L3, j'ai seulement 5 jours donc je ne retiens pas L3.
Entre L2 et L4, j'ai 8 jours donc je retiens L4.
Entre L4 et L5,j'ai 10 jours de différences donc je retiens L5.

J'ai du mal à programmer cela.
J'ai réfléchis à un while.
Merci beaucoup d'avance pour les personnes qui essaieront de m'aider.

A bientôt!

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 10 Fév 2009, 18:58

Comme ca, a vue de nez, je créerais une variable contenant la différence dans une boucle :

Code : Tout sélectionner

for (i in 2:nrow(data)){
    diff[i] <- data$jour[i]-data$jour[i-1]
}

Puis une construit une variable booléenne qui vaut 'true' si la différence est supérieure ou égale a 7, 'false' sinon (et on suppose que la premiere ligne, tu la prends quoi qu'il arrive, donc on ajoute un 'true' au départ)

Code : Tout sélectionner

jeGarde <- c(TRUE,diff>=7)

Au final, tu sélectionnes dans ton data.frame que les lignes pour lesquelles jeGarde est 'true'

Code : Tout sélectionner

data[jeGarde,]


Christophe

Aurélien Madouasse
Messages : 352
Enregistré le : 26 Fév 2007, 11:23

Messagepar Aurélien Madouasse » 11 Fév 2009, 09:56

Bonjour,

Est-ce qu'un truc de ce genre conviendrait?

Code : Tout sélectionner

Tab1 <- data.frame(jours = 1:25, val = rnorm(25))

jr   <- 1
Tab2 <- Tab1[1,]

for(i in 2:nrow(Tab1)){

if ((Tab1$jours[i] - jr) > 6) {

 Tab2 <- rbind(Tab2, Tab1[i,])
 jr <- Tab1$jours[i]

 }  }


Aurélien

naima oumouhou
Messages : 34
Enregistré le : 04 Mar 2008, 13:39

Messagepar naima oumouhou » 11 Fév 2009, 13:51

Bonjour à tous,

je vous remercie d'avoir regardé mon post et de m'avoir proposé des solutions.
Mais ce n'est pas tout à fait cela que je souhaite.
J'ai trouvé la solution.
Voilà le code:

Code : Tout sélectionner

jour<-c(NA,8,5,3,10)
valeurs<-c(100,200,300,400,500)
data<-data.frame(jour,valeurs)

nb<-length(jour)
ligne<-vector("numeric",0)
cpt<-0

for (m in 2:nb)
{

jours<-data$jour[m]

if ((cpt+jours)>=7)
{
ligne<-c(ligne,m)
cpt<-0
}
else

{
cpt<-cpt+jours
}

}


resultat<-rbind(data[1,],data[ligne,])

Voilà!!!
Bonne journée à tous


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité