Fandom

Scratchpad

Recoder un vecteur

221,960pages on
this wiki
Add New Page
Discuss this page0 Share

Suite de est-ce que les élements d'un vecteur sont contenus dans un autre vecteur ?. Je veux remplacer "P0", "P1", "P2", "P3", "RF" par "Mar", "Jun", "Sep", "Dec", "Mar N+1".

Proposition de soluce

> X <- rep(c("P0", "P1", "P2", "P3", "RF"), 2)
> tableA <- c("P0", "P1", "P2", "P3", "RF")
> tableB <- c("Mar", "Jun", "Sept", "Dec", "Mar N+1")
> match(X,tableA)
[1] 1 2 3 4 5 1 2 3 4 5
> X <- tableB[match(X,tableA)]
> X
[1] "Mar"     "Jun"     "Sept"    "Dec"     "Mar N+1" "Mar"     "Jun"
[8] "Sept"    "Dec"     "Mar N+1"
>

Variation 1

J'ajoute à mon vecteur un élément mais je ne référence pas son code dans la table de correspondance (i.e. le couple des vecteur tableA et tableB)

> X <- rep(c("P0", "P1", "P2", "P3", "RF", "Pouet"), 2)
> tableA <- c("P0", "P1", "P2", "P3", "RF")
> tableB <- c("Mar", "Jun", "Sept", "Dec", "Mar N+1")
> X <- tableB[match(X,tableA)]
> X
[1] "Mar"     "Jun"     "Sept"    "Dec"     "Mar N+1" NA        "Mar"
[8] "Jun"     "Sept"    "Dec"     "Mar N+1" NA

NA a été ajouté à la place de mon nouvel élément.

Variation 2

J'ajoute une entrée dans ma table de correspondance (i.e. tableA) mais pas de sortie.

> X <- rep(c("P0", "P1", "P2", "P3", "RF"), 2)
> tableA <- c("P0", "P1", "P2", "P3", "RF", "Pouet")
> tableB <- c("Mar", "Jun", "Sept", "Dec", "Mar N+1")
> X <- tableB[match(X,tableA)]
> X
[1] "Mar"     "Jun"     "Sept"    "Dec"     "Mar N+1" "Mar"     "Jun"
[8] "Sept"    "Dec"     "Mar N+1"

Il ne se passe rien, c'était de toute façon quasiment une variation de principe dans une démarche d'exhaustivité.

Variation 3.0

Reprise de la variation 1. J'ajoute une sortie "ERROR" à la table de correspondance. J'ajoute également nomatch=NA à l'utilisation de match, mais c'est de toute façon la valeur par défaut.

> X <- rep(c("P0", "P1", "P2", "P3", "RF", "Pouet"), 2)
> tableA <- c("P0", "P1", "P2", "P3", "RF")
> tableB <- c("Mar", "Jun", "Sept", "Dec", "Mar N+1", "ERROR")
> X <- tableB[match(X,tableA,nomatch=NA)] # c'est le défaut
> X
[1] "Mar"     "Jun"     "Sept"    "Dec"     "Mar N+1" NA        "Mar"
[8] "Jun"     "Sept"    "Dec"     "Mar N+1" NA

Pas de changement par rapport à la variation 1.

Variation 3.1

Maintenant je modifie nomatch=NA en nomatch=6 ...

> X <- rep(c("P0", "P1", "P2", "P3", "RF", "Pouet"), 2)
> X <- tableB[match(X,tableA,nomatch=6)]
> X
[1] "Mar"     "Jun"     "Sept"    "Dec"     "Mar N+1" "ERROR"   "Mar"
[8] "Jun"     "Sept"    "Dec"     "Mar N+1" "ERROR"

ERROR a remplacé NA : 6 désigne le sixième élément du vecteur de sortie de la table de correspondance.

Variation 3.2

Et si je met 0 il se passe quoi ?

> X <- rep(c("P0", "P1", "P2", "P3", "RF", "Pouet"), 2)
> X <- tableB[match(X,tableA,nomatch=0)]
> X
[1] "Mar"     "Jun"     "Sept"    "Dec"     "Mar N+1" "Mar"     "Jun"
[8] "Sept"    "Dec"     "Mar N+1"

L'entrée sans correspondance du vecteur X n'est pas recodée et est supprimée du vecteur de sortie : ce dernier ne contient plus que 10 éléments alors qu'il en contenait 12 initialement.

Variation 3.3

Et si je met nomatch à 7, c'est à dire si je fait référence à un élément qui n'existe pas dans la sortie de la table de correspondance (tableB) ...

> X <- rep(c("P0", "P1", "P2", "P3", "RF", "Pouet"), 2)
> X <- tableB[match(X,tableA,nomatch=7)]
> X
[1] "Mar"     "Jun"     "Sept"    "Dec"     "Mar N+1" NA        "Mar"
[8] "Jun"     "Sept"    "Dec"     "Mar N+1" NA

Pas d'erreur, pas de warning, recodage en NA, c'est à dire la valeur par défaut.

Pfiou ...

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.