extraire données avec condition

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

anthony payoux
Messages : 17
Enregistré le : 03 Jan 2017, 18:03

extraire données avec condition

Messagepar anthony payoux » 10 Fév 2017, 16:06

bonjours,

j'ai un data frame de de 3000 lignes et 800 colonnes. Je voudrais pour chaque colonnes, extraire la date correspondante qui se trouve dans la colonne 1, lorsque il y a un zero.

j'arrive très bien à le faire lorsque je le fait sur une seule colonne en utilisant subset(data[,1],data$V2==0) ou encore data[data$V2==0,1]

Mais lorsque je veux faire cette opération pour chaque colonne, je n'arrive pas à avoir un bon résultat.


merci pour toute aide !

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: extraire données avec condition

Messagepar Pierre-Yves Berrard » 10 Fév 2017, 16:57

Bonjour,

Vous pourriez faire une boucle sur les colonnes 2 et suivantes en s'inspirant de votre code.

Mais le mieux est d'utiliser une fonction de type *apply :

Code : Tout sélectionner

# données fictives
data <-
  data.frame(
    date = seq(as.Date("2017/2/1"), length.out = 28, by = "days"),
    v1 = sample(0:3, 28, replace = TRUE),
    v2 = sample(0:2, 28, replace = TRUE),
    v3 = sample(0:4, 28, replace = TRUE)
  )

# pour chaque colonne, extrait les dates ou la colonne vaut 0
date_zero <- lapply(data[ , -1], function(x) data$date[x == 0])

Le résultat est une liste de même longueur que le nombre de colonnes (-1).

(si un seul zéro par colonne, remplacer lapply par sapply pour récupérer un vecteur et non une liste)
PY

anthony payoux
Messages : 17
Enregistré le : 03 Jan 2017, 18:03

Re: extraire données avec condition

Messagepar anthony payoux » 12 Fév 2017, 20:12

Bonjour,

Merci pour la réponse !

Le problème est que je voudrais non pas obtenir une liste mais plutôt un data.frame avec 800 colonnes et pour les lignes les dates qui correspondent à une valeur nulle.

par exemple
V1 V2 V3
01/01/2008 0 1 3
02/01/2008 3 0 0

Je voudrais obtenir: V1 V2 V3
01/01/2008 02/01/2008 02/01/2008

Mais je ne vois pas comment arriver à obtenir le résultat sous cette forme

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: extraire données avec condition

Messagepar Pierre-Yves Berrard » 12 Fév 2017, 20:22

Comme un data frame est une forme particulière de liste :

Code : Tout sélectionner

as.data.frame(lapply(data[ , -1], function(x) data$date[x == 0]))

Par curiosité, quel est l'intérêt d'un data.frame d'une seule ligne ?
Pourquoi pas un vecteur nommé ?

Code : Tout sélectionner

sapply(data[ , -1], function(x) data$date[x == 0])
PY

anthony payoux
Messages : 17
Enregistré le : 03 Jan 2017, 18:03

Re: extraire données avec condition

Messagepar anthony payoux » 12 Fév 2017, 21:29

En fait, votre solution marche très bien, c'est seulement moi qui est encore du mal, à utiliser les listes

anthony payoux
Messages : 17
Enregistré le : 03 Jan 2017, 18:03

Re: extraire données avec condition

Messagepar anthony payoux » 12 Fév 2017, 22:09

Mais merci beaucoup, en fait l'utilisation de liste est beaucoup plus facile !


Retourner vers « Questions en cours »

Qui est en ligne

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