IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

detecter des points spéciaux à partir d'un vecteur des données


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut detecter des points spéciaux à partir d'un vecteur des données
    Bonsoir
    j'ai un vecteur de données comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    31  41  70  80  94 133 400 420 442
    je veux détecter les points : 133 , 442
    J'explique comment : le principe est le domaine seuil c'est-à-dire le passage d'un point à un autre par exemple de 31 à 41 doit dépasser un seuil de 70.
    donc de 31 à 41 la différence est < 70 je passe au suivant, entre 70 et 41 est < 70 .. ainsi de suite jusqu'à entre 400 et 133 où la différence est > 70 donc je retiens le point 133. De la meme manière je détecte le point 442.
    j'ai essayé avec ce code mais ça me donne pas ce que je cherche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    det=function(data)
    {
    	n = length(data)
          seuil= 70
    	pt = vector()
     
    	for(i in 1:(n-1))
         {
    		ang = data[i+1]-data[i]
    		if(ang>seuil)
                  pt=c(pt,data[i+1])
    	}
    return(pt)
    }
    Avez-vous des idées pour m'aider ?
    Merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 339
    Points
    339
    Par défaut
    Hello,

    Dans votre exemple, je ne comprends pas pourquoi le 442 est "détecté" (442-420=22 < 70).

    Si non, une piste avec diff:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > diff(c(31,41,70,80 ,94,133,400,420,442))
    [1]  10  29  10  14  39 267  20  22
    Bien à vous

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    concernant 442: je dois détecter toujours le dernier point (cas particulier).

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 339
    Points
    339
    Par défaut
    re-bonsoir,
    Il est facile alors de trouver une solution avec le diff. Si vous ne trouvez pas, je peux vous aider.
    Bien à vous

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Re-bonsoir
    j'arrive pas à trouver la solution ! veuillez m'aider svp

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 339
    Points
    339
    Par défaut
    Alors,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v <- c(31,41,70,80 ,94,133,400,420,442)
    diff() donne les différences:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > diff(v)
    [1]  10  29  10  14  39 267  20  22
    Pour avoir les différences > que 70:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > diff(v)>70
    [1] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
    Pour avoir les valeurs où la différence est > que 70:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > v[diff(v)>70]
    [1] 133
    Pour avoir la dernière valeur du vecteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > v[length(v)]
    [1] 442
    Voici donc la solution final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > c(v[diff(v)>70],v[length(v)])
    [1] 133 442
    J'espère avoir pu vous aider!

    Bien à vous,

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Merci
    Mais j'ai réussi à le faire de cette manière aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    det=function(data)
    {
    	n = length(data)
          seuil= 70
    	pt = vector()
          pt1 = vector() 
     
    	for(i in 1:(n-1))
         {
    		ang = data[i+1]-data[i]
    		if(ang>seuil)
                  pt=c(pt,data[i])
     
    	}
    pt=c(pt,det=function(data)
    {
    	n = length(data)
          seuil= data[n]/3
    	pt = vector()
          pt1 = vector() 
     
    	for(i in 1:(n-1))
         {
    		ang = data[i+1]-data[i]
    		if(ang>seuil)
                  pt=c(pt,data[i])
     
    	}
    pt1=c(pt,data[n])
    return(pt1)
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer des cube a partir d'une base de données (oracle) avec talend
    Par tahabers dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 18/02/2015, 11h30
  2. Telecharger des fichiers a partir de la base de données
    Par Techys dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 01/10/2013, 16h37
  3. Réponses: 16
    Dernier message: 08/04/2013, 22h41
  4. Créer des clés informatiques à partir d'1 base de données??
    Par Flateric dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 11/02/2005, 07h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo