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: как создать новый столбец в фрейме данных на основе другого фрейма данных?

В R, как вы классифицируете значения в одном фрейме данных на основе диапазонов в другом фрейме данных?

0 ответов

Другие вопросы по тегам