R: Векторизованные значения записи в одном кадре данных на основе другого кадра данных.
У меня есть фрейм данных с рядом цифр и строк букв. Давайте назовем это "ключом декодера". Каждый столбец в ключе декодера представляет отображение между цифрами и буквами.
У меня также есть фрейм данных с колонкой кодов, состоящей из цифр разных цифр. Я хочу создать новую переменную в этом последнем фрейме данных, которая "переводит" эти коды из цифр в буквы, используя ключ декодера. Другими словами, у меня будут исходные коды на основе чисел, а затем у меня будет еще один столбец с буквами, которые соответствуют этому коду.
Я пытался реализовать это с помощью цикла и dplyr::recode()
но (а) держу пари, что есть лучший способ сделать это, и (б) перекодирование, похоже, не работает с индексацией. Какие-либо решения? Ниже приведен небольшой воспроизводимый пример. В реальных данных alphas
, numbers
, а также codes
векторы очень большие.
# Load packages
library(dplyr)
# Generate decoder
key <- data.frame(alphas = c("A","B","C"),
numbers = c("1","2","3"),
stringsAsFactors = FALSE)
# Generate codes from the possible values
# found in key$numbers
code_df <- data.frame(codes = c("2313","2","123","321"),
stringsAsFactors = FALSE)
# Add "decoded value" to the codes table by
# converting any number in a code into the letter
# found above the code in the key data.frame. Loop
# through each possible number requiring decoding
# in the decoder table and replace it with the letter
# above it
for(i in 1:ncol(key)){
code_df$codes <- dplyr::recode(x = code_df$codes, key[2,i] = key[1,i])
}
Примечание: это отличается от следующих постов, потому что мне нужно перекодировать переменную, а не соединять две переменные, и у меня также есть достаточно большие данные, где я не могу сделать это вручную.
Изменение значения фрейма данных на основе другого фрейма данных
Язык r: как создать новый столбец в фрейме данных на основе другого фрейма данных?