Fandom

Scratchpad

Recoder un vecteur

215,637pages on
this wiki
Add New Page
Discuss this page0 Share

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.

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 ...

Also on Fandom

Random wikia