+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Nouveau Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : septembre 2012
    Messages : 107
    Points : 27
    Points
    27

    Par défaut déterminer la position des éléments précis

    Bonjour,
    J'ai un vecteur de données, comment puis-je trouver la position des éléments ayant une valeur > 10.
    Voici un petit exemple :
    Code :
    m=c(20,33,2,15,3,10,17)
    Il me rend:
    J'ai réussi à écrire ce code qui me permet juste de déterminer les éléments ayant une valeur > 10 et non leurs positions dans le vecteur initial.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ess=function(data)
    {
    r=NULL
    n=length(data)
    for(i in 1:n)
       {
        aa=paste("p",i,sep="")
        if(data[i]>10 )
            {
               r=c(r,assign(aa,data[i],pos=1))
            }
         }
    return(r)
    }
    Donc ma question est comment determiner les position des éléments ayant une valeur > 10 ?
    J'ai essayé avec which mais sans avoir réussi
    Merci d'avance

  2. #2
    Modératrice

    Femme Profil pro
    Chargée de Statistiques
    Inscrit en
    juin 2010
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargée de Statistiques
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2010
    Messages : 531
    Points : 1 431
    Points
    1 431

    Par défaut

    Bonjour,

    Citation Envoyé par orland Voir le message
    Voici un petit exemple :
    Code :
    m=c(20,33,2,15,3,10,17)
    Il me rend:
    De qui/quoi parlez-vous dans le "il me rend" ? Est-ce le résultat que vous souhaitez obtenir ?
    Qu'avez-vous tenté avec la fonction "which" (vous pouvez envoyer votre code même s'il ne fonctionne pas) ?

    En effet, si j'ai bien compris votre problème, qui est de déterminer les positions des éléments d'un vecteur qui sont supérieurs à 10, la fonction "which" me semble toute indiquée !
    Voir l'aide et ses exemples :

    Bonne continuation !


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

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

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

    Informations forums :
    Inscription : septembre 2012
    Messages : 107
    Points : 27
    Points
    27

    Par défaut

    Oui, vous avez bien compris ce que je veux
    J'ai vu la documentation de which et je l'ai utilisée avant avec succès mais je ne sais pas comment faire avec ce problème
    J'ai essayé ce code mais ça ne marche pas !
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ess=function(data)
    {
    r=NULL
    n=length(data)
    
    for(i in 1:n)
       {
        aa=paste("p",i,sep="")
        if(data[i]>=7)
            {
              r=c(r,assign(aa,data[i],pos=1))
              v=c(v,assign(aa,which(data[i]==r),pos=1))
            }  
        }
    return(v)
    }
    Si vous voulez, si vous disposez d'une solution, veuillez me la fournir
    Merci d'avance.

  4. #4
    Modératrice

    Femme Profil pro
    Chargée de Statistiques
    Inscrit en
    juin 2010
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargée de Statistiques
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2010
    Messages : 531
    Points : 1 431
    Points
    1 431

    Par défaut

    Re-bonjour,

    Déjà dans votre code, il y a un problème dans la boucle ici :

    Code :
    v=c(v,assign(aa,which(data[i]==r),pos=1))
    En effet, pour pouvoir écrire cela, il faut que vous définissiez une première fois (par exemple en dehors de la boucle) l'élement "v" (comme vous l'avez fait pour l'élément "r").


    Ensuite, je ne vois pas pourquoi vous avez besoin de faire une telle fonction ? Est-ce que c'est un vecteur du type m=c(20,33,2,15,3,10,17) que vous passez en argument (à la place de l'élément "data") dans la fonction ?
    Si oui et que tout ce que vous souhaitez obtenir sont les positions pour lesquelles la valeur est supérieure à un élément (par exemple 10), je pense que vous vous compliquez la vie et qu'un simple appel à la fonction "which" suffit.


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

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

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

    Informations forums :
    Inscription : septembre 2012
    Messages : 107
    Points : 27
    Points
    27

    Par défaut

    Re-bonjour
    Oui, oui, j'ai oublié de définir la variable "v" mais même si je la définie, reste le même problème.

    Est-ce que c'est un vecteur du type m=c(20,33,2,15,3,10,17) que vous passez en argument (à la place de l'élément "data") dans la fonction ?
    oui c'est ce vecteur
    je pense que vous vous compliquez la vie et qu'un simple appel à la fonction "which" suffit.
    En fait dans mon algo j'ai besoin de ces éléments aussi bien de leurs positions.
    Vous me dites toujours un simple appel à la fonction "which" suffit ! Mais je ne sais pas comment faire parce que une fonction "which" comme dans ce petit exemple possède comme vecteur la phrase "LETTERS" et comme lettre voulu "R",
    donc dans mon exemple je crois que j'aurais besoin du vecteur initial contenant et celui qui contient les éléments ayant une val > 10.
    C'est que je pense.
    Veuillez svp me fournir un petit code pour le tester

  6. #6
    Modératrice

    Femme Profil pro
    Chargée de Statistiques
    Inscrit en
    juin 2010
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargée de Statistiques
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2010
    Messages : 531
    Points : 1 431
    Points
    1 431

    Par défaut

    Le truc c'est que j'ai l'impression que si je vous fournis un exemple cela vous donnera directement votre solution or j'aurais aimé réussir à vous faire trouver par vous-mêmes

    Bon voici un exemple "bête" mais qui est presque ce que je crois que vous souhaitez :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    v<-10:1
    v
     [1] 10  9  8  7  6  5  4  3  2  1
    
    mypos<-which(v>5)
    mypos
     [1] 1 2 3 4 5
    
    myval<-v[mypos]
    myval
     [1] 10  9  8  7  6
    Est-ce que cela vous paraît plus clair ? La fonction "which" est très utile dans ce genre de cas !


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

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

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

    Informations forums :
    Inscription : septembre 2012
    Messages : 107
    Points : 27
    Points
    27

    Par défaut

    merci
    oui j'ai bien compris que vous voulez que je trouve ceci tout seul
    en fait, "j'ai la tête saturée" et ce petit code que je cherche n'est en fait q'une petite partie d'un long algorithme dont j'ai codé plus que 15 fonctions (la plus petite ayant 100 lignes) :/
    J'arrive bientot à finir mon approche.
    Merci à vous, à votre aide
    merci infiniment
    Cordialement B.H

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •