Есть switch
заявление, но мне никогда не удается заставить его работать так, как я думаю. Поскольку вы не привели пример, я сделаю его, используя факторную переменную:
dft <-data.frame(x = sample(letters[1:8], 20, replace=TRUE))
levels(dft$x)
[1] "a" "b" "c" "d" "e" "f" "g" "h"
Если вы укажете нужные категории в порядке, соответствующем переназначению, вы можете использовать факторные или числовые переменные в качестве индекса:
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" ...
Позже я узнал, что на самом деле есть две разные функции переключателя. Это не общая функция, но вы должны думать о ней как о switch.numeric
или switch.character
. Если ваш первый аргумент - это «фактор» R, вы получите switch.numeric
поведение, которое может вызвать проблемы, поскольку большинство людей видят факторы, отображаемые как символы, и делают неверное предположение, что все функции будут обрабатывать их как таковые.
dput()
b) Вы хотите решение в базе R, dplyr, data.table, tidyverse ...?