Il y a une switch
déclaration, mais je n'arrive jamais à la faire fonctionner comme je pense qu'elle devrait. Puisque vous n'avez pas fourni d'exemple, je vais en créer un en utilisant une variable de facteur:
dft <-data.frame(x = sample(letters[1:8], 20, replace=TRUE))
levels(dft$x)
[1] "a" "b" "c" "d" "e" "f" "g" "h"
Si vous spécifiez les catégories souhaitées dans un ordre approprié à la réaffectation, vous pouvez utiliser le facteur ou les variables numériques comme index:
c("abc", "abc", "abc", "def", "def", "def", "g", "h")[dft$x]
[1] "def" "h" "g" "def" "def" "abc" "h" "h" "def" "abc" "abc" "abc" "h" "h" "abc"
[16] "def" "abc" "abc" "def" "def"
dft$y <- c("abc", "abc", "abc", "def", "def", "def", "g", "h")[dft$x] str(dft)
'data.frame': 20 obs. of 2 variables:
$ x: Factor w/ 8 levels "a","b","c","d",..: 4 8 7 4 6 1 8 8 5 2 ...
$ y: chr "def" "h" "g" "def" ...
J'ai appris plus tard qu'il y avait vraiment deux fonctions de commutation différentes. Ce n'est pas une fonction générique mais vous devriez y penser comme étant soit switch.numeric
ou switch.character
. Si votre premier argument est un «facteur» R, vous obtenez un switch.numeric
comportement, qui est susceptible de causer des problèmes, car la plupart des gens voient les facteurs affichés comme des caractères et font l'hypothèse erronée que toutes les fonctions les traiteront comme tels.
dput()
b) Voulez-vous une solution dans la base R, dplyr, data.table, tidyverse ...?