position d'un mot dans un vecteur

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

Eric Pagot
Messages : 195
Enregistré le : 15 Fév 2007, 17:10

position d'un mot dans un vecteur

Messagepar Eric Pagot » 03 Oct 2007, 16:15

bonjour,

je voudrais chercher la position d'un mot dans un vecteur pour pouvoir l'utiliser comme indice ensuite.

par ex vect<-c("abc","def","abc/def","ghi")

le problème est que si j'utilise la fonction grep, elle me retourne 2 valeurs

grep("abc",vect) donne 1 3

Je ne souhaite avoir que le "1"

Exixte-t-il une fonction qui teste le mot exact ?
Vétérinaire CTPA

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 04 Oct 2007, 05:12

ça devrait le faire:

Code : Tout sélectionner

foo <- function(x, string){
  pos <- grep(string, x)
  pos[nchar(x[pos]) == nchar(string)]
  }


Exemple:

Code : Tout sélectionner

> foo <- function(x, string){
+   pos <- grep(string, x)
+   pos[nchar(x[pos]) == nchar(string)]
+   }
>
> vect <- c("aaaa", "aabc", "ab", "abc", "def", "abc/def", "ghi", "abc")
>
> foo(vect, "abc")
[1] 4 8


Il y a probablement des façons plus directes en utilisant les expressions régulières (regexp).

Renaud

Matthieu Lesnoff
Messages : 120
Enregistré le : 29 Nov 2004, 12:41

Re: position d'un mot dans un vecteur

Messagepar Matthieu Lesnoff » 04 Oct 2007, 05:12

Eric Pagot a écrit :je voudrais chercher la position d'un mot dans un vecteur pour pouvoir l'utiliser comme indice ensuite.


ou, si le mot n'est present qu'une seule fois, par exemple :

Code : Tout sélectionner

> match("abc", vect)
[1] 1


M.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 04 Oct 2007, 05:18

Le pb de match est qu'elle retourne le premier élément corrspondant, et pas les autres:

Code : Tout sélectionner

> vect <- c("aaaa", "aabc", "ab", "abc", "def", "abc/def", "ghi", "abc")
> match("abc", vect)
[1] 4


Voir l'aide de match:

match returns a vector of the positions of (first) matches of its first argument in its second.


Renaud

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 04 Oct 2007, 06:02

Ou encore :

Code : Tout sélectionner

> vect <- c("aaaa", "aabc", "ab", "abc", "def", "abc/def", "ghi", "abc")
> which(as.logical(match(vect,"abc",nomatch=0)))
[1] 4 8


François

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

Messagepar Logez Maxime » 04 Oct 2007, 07:41

Bonjour,

On peut aussi utiliser :

Code : Tout sélectionner

vect <- c("aaaa", "aabc", "ab", "abc", "def", "abc/def", "ghi", "abc")
which(vect=="abc")
[1] 4 8


Maxime

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 04 Oct 2007, 08:43

Logez Maxime a écrit :On peut aussi utiliser :

Code : Tout sélectionner

which(vect=="abc")

oups... bien sûr ! comment ne pas y avoir pensé plus tôt ...

François


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité