Jest takie switch
stwierdzenie, ale nigdy nie wydaje mi się, żeby działało tak, jak powinno. Ponieważ nie podałeś przykładu, utworzę go za pomocą zmiennej czynnika:
dft <-data.frame(x = sample(letters[1:8], 20, replace=TRUE))
levels(dft$x)
[1] "a" "b" "c" "d" "e" "f" "g" "h"
Jeśli określisz żądane kategorie w kolejności odpowiedniej do ponownego przypisania, możesz użyć współczynnika lub zmiennych numerycznych jako indeksu:
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" ...
Później dowiedziałem się, że tak naprawdę są dwie różne funkcje przełączników. To nie jest funkcja ogólna, ale powinieneś o niej myśleć jako albo switch.numeric
albo switch.character
. Jeśli pierwszym argumentem jest „czynnik” R, otrzymujesz switch.numeric
zachowanie, które może powodować problemy, ponieważ większość ludzi postrzega czynniki jako znaki i przyjmuje błędne założenie, że wszystkie funkcje będą je przetwarzać jako takie.
dput()
b) Czy potrzebujesz rozwiązania w bazie R, dplyr, data.table, tidyverse ...?