Existe uma switch
declaração, mas nunca consigo fazê-la funcionar da maneira que acho que deveria. Como você não forneceu um exemplo, farei um usando uma variável de fator:
dft <-data.frame(x = sample(letters[1:8], 20, replace=TRUE))
levels(dft$x)
[1] "a" "b" "c" "d" "e" "f" "g" "h"
Se você especificar as categorias que deseja em uma ordem apropriada para a reatribuição, você pode usar o fator ou as variáveis numéricas como um índice:
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" ...
Mais tarde, aprendi que realmente existem duas funções de switch diferentes. Não é uma função genérica, mas você deve pensar nela como switch.numeric
ou switch.character
. Se seu primeiro argumento for um 'fator' R, você obterá um switch.numeric
comportamento, que provavelmente causará problemas, uma vez que a maioria das pessoas vê os fatores exibidos como caracteres e faz a suposição incorreta de que todas as funções os processarão como tais.
dput()
b) Você quer uma solução em base R, dplyr, data.table, tidyverse ...?