date

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

Marianne Robert
Messages : 108
Enregistré le : 21 Juil 2008, 07:38

date

Messagepar Marianne Robert » 06 Jan 2011, 14:27

Bonjour a tous,

j ai un fichier de donnée (extrait ci dessous)

Code : Tout sélectionner

 
head(test)
  Mois.DTOF Mois.FTOF day.DTOF day.FTOF
1        NA        NA       NA       NA
2         2         2       17       20
3         2         3       24       12
4         3         3       13       18
5         3         4       26       23
6         4         5       25        1



et je voudrai selectionner seulement les lignes dont les dates soient comprises entre 2 dates définies : par exemple entre le 23 mars et le 14 avril.
j ai reformaté mon fichier de donnée et les colonnes Mois.FTOF et day.FTOF représente les mois et jours sur lesquels je souhaite faire ma sélection
mais c est peut etre pas la bonne solution. Il y a peut être un package qui lit les dates directement jj/mm/aaaa

j ai tenté plusieurs chose mais sans succès? Ci dessous un essai pour sélectionner les lignes dont les dates sont supérieures au 23 mars



Code : Tout sélectionner

je fait une boucle sur les lignes (i) et je sélectionne la ligne si

test[i,2]>=3 & test[i,4]>=23


cela ne marche pas car j'ai bien que mois mois sup a 3 mais aussi plus que des jours sup a 23 pour les autres mois !


merci a vous

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Messagepar Eric Casellas » 06 Jan 2011, 15:19

Bonjour,

une façon de faire (pas très propre mais qui devrait marcher...)

Code : Tout sélectionner

test[ (!is.na(test[, 2]) | (!is.na(test[, 4]))) & (test[, 2] * 100 + test[, 4]) >= 323, ]
Eric

Logez Maxime
Messages : 3141
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 06 Jan 2011, 15:38

Bonjour,

Une solution possible est de reconstituer des dates et faire la sélection sur ces dates:

Code : Tout sélectionner

auxi <- as.Date(sprintf("%02d/%02d/2010", test$day.FTOF, test$Mois.FTOF), format="%d/%m/%Y")

# entre le 23 février et le 14 avril :
test[!is.na(auxi) & auxi>="2010-02-23" & auxi<="2010-04-14",]
Maxime

Marianne Robert
Messages : 108
Enregistré le : 21 Juil 2008, 07:38

Messagepar Marianne Robert » 06 Jan 2011, 15:53

merci a vous deux pour votre aide

les deux versions fonctionne , même si celle de maxime est plus élégante et optimale (pas besoin de boucle ....)

Il n y a pas grand chose dans l aide de la focntion as.Date
pourriez vous m expliquer un peu le début du code

sprintf("%02d/%02d/2010",

si j ai une colonne avec l année je la rajoute apres test$Mois.FTOF ?

marianne

Logez Maxime
Messages : 3141
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 09 Jan 2011, 22:48

Re,

la fonction sprintf te permet de recréer la chaine de caractère que tu vas ensuite transformer en date. Si tu as une colonne de date alors tu peux faire :

Code : Tout sélectionner

auxi <- with(test, as.Date(sprintf("%02d/%02d/%4d", day.FTOF, Mois.FTOF, Annee.FTOF), format="%d/%m/%Y"))

Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité