Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > R
R Forum d'entraide sur la programmation en langage R
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/12/2012, 15h50   #1
orland
Nouveau Membre du Club
 
Homme
Enseignant Chercheur
Inscription : septembre 2012
Messages : 106
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

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

Informations forums :
Inscription : septembre 2012
Messages : 106
Points : 29
Points : 29
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
orland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h04   #2
A. D.
Modératrice
 
Femme Aline Deschamps
Chargée de Statistiques
Inscription : juin 2010
Messages : 464
Détails du profil
Informations personnelles :
Nom : Femme Aline Deschamps
Âge : 25
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 : 464
Points : 1 283
Points : 1 283
Envoyer un message via Skype™ à A. D.
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.
A. D. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h14   #3
orland
Nouveau Membre du Club
 
Homme
Enseignant Chercheur
Inscription : septembre 2012
Messages : 106
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

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

Informations forums :
Inscription : septembre 2012
Messages : 106
Points : 29
Points : 29
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.
orland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h29   #4
A. D.
Modératrice
 
Femme Aline Deschamps
Chargée de Statistiques
Inscription : juin 2010
Messages : 464
Détails du profil
Informations personnelles :
Nom : Femme Aline Deschamps
Âge : 25
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 : 464
Points : 1 283
Points : 1 283
Envoyer un message via Skype™ à A. D.
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.
A. D. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h52   #5
orland
Nouveau Membre du Club
 
Homme
Enseignant Chercheur
Inscription : septembre 2012
Messages : 106
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

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

Informations forums :
Inscription : septembre 2012
Messages : 106
Points : 29
Points : 29
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.

Citation:
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
Citation:
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
orland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h58   #6
A. D.
Modératrice
 
Femme Aline Deschamps
Chargée de Statistiques
Inscription : juin 2010
Messages : 464
Détails du profil
Informations personnelles :
Nom : Femme Aline Deschamps
Âge : 25
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 : 464
Points : 1 283
Points : 1 283
Envoyer un message via Skype™ à A. D.
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.
A. D. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 17h05   #7
orland
Nouveau Membre du Club
 
Homme
Enseignant Chercheur
Inscription : septembre 2012
Messages : 106
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

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

Informations forums :
Inscription : septembre 2012
Messages : 106
Points : 29
Points : 29
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
orland est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h53.


 
 
 
 
Partenaires

Hébergement Web