Запись значений в выборке столбцов кадра данных с использованием dplyr - PullRequest
0 голосов
/ 03 октября 2018

У меня большой набор данных, как в следующем примере.Столбцы с буквой As в заголовках имеют коды от 1 до 4, а столбцы с буквами B от 1 до 3.

library(dplyr)

d <- data.frame(
     ID = 1:10,
     A = sample(x = 1:4, size = 10, replace = T),
     AA = sample(x = 1:4, size = 10, replace = T),
     B = sample(x = 1:3, size = 10, replace = T),
     BB = sample(x = 1:3, size = 10, replace = T)
) 

enter image description here

Есть ли аккуратныеспособ использования каналов в dplyr для перекодирования значений из столбцов с As в заголовках и столбцов с Bs в следующие строки?

  • As - от 1, 2, 3, 4 до Green, Yellow,Оранжевый, красный соответственно
  • Bs - от 1, 2, 3 до зеленого, желтый, красный соответственно

Это упрощенная и удобная версия реального набора данных.

enter image description here

1 Ответ

0 голосов
/ 05 октября 2018

Используя mutate_at из dplyr, можно выполнить перекодирование из числовых кодов в строки.Необходимо сначала привести столбцы, которые мы хотим перекодировать, из числа в символ или, в противном случае, появится сообщение об ошибке.

library(dplyr)

d <- data.frame(
     ID = 1:10,
     A  = sample(x = 1:4, size = 10, replace = T),
     AA = sample(x = 1:4, size = 10, replace = T),
     B  = sample(x = 1:3, size = 10, replace = T),
     BB = sample(x = 1:3, size = 10, replace = T))

d_recoded <- d %>% mutate_at(vars(-contains("ID")), funs(as.character)) %>%
             mutate_at(vars(contains("A"), -contains("ID")), funs(case_when(. == 1 ~ "Green", . == 2 ~ "Yellow", . == 3 ~ "Orange", . == 4 ~ "Red"))) %>%
             mutate_at(vars(contains("B"), -contains("ID")), funs(case_when(. == 1 ~ "Green", . == 2 ~ "Yellow", . == 3 ~ "Red")))
...