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