Добавить метки к фактору на основе фрейма данных - PullRequest
1 голос
/ 04 мая 2020

У меня есть фрейм данных с цифрами c, например, такими:

data <- data.frame(q1=c("2", "1", "3"),
                   q2=c("1", "3", "2"),
                   other=c("other", "other", "other"))

Я хотел бы рассматривать эти данные как факторы и добавлять метки факторов к этим данным. Я все еще хотел бы видеть данные цифры c, чтобы я мог выполнять функции математики c, но видеть метки в ggplot, et c. Метки факторов находятся в другом фрейме данных, например:

factors <- data.frame(variable=c("q1", "q1", "q1", "q2", "q2", "q2"),
                      level=c(1,2,3,1,2,3),
                      labels=c("A", "B", "C", "X", "Y", "Z"))

Как я могу использовать factors df для добавления меток в data df?

Я пробовал это, но это не работает:

labelled <- data %>%
  mutate_at(.vars = vars(starts_with("q")),
            .funs = funs((., 
                                labels=factors$labels
                                )))

Я уверен, что есть какой-то простой способ, который я не рассматриваю. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 04 мая 2020

Один из вариантов - l oop над столбцами 'q' с imap, подмножество столбцов 'level' и 'label' из набора данных 'factor' на основе имени столбца и указание этого в factor

library(dplyr)
library(purrr)
data1 <- imap_dfr(data[startsWith(names(data), 'q')], ~ 
           {i1 <- factors$variable == .y
          factor(.x, levels = factors$level[i1], 
              labels = factors$labels[i1]) }) %>%
   bind_cols(., data %>% select(other))

str(data1)
#tibble [3 × 3] (S3: tbl_df/tbl/data.frame)
# $ q1   : Factor w/ 3 levels "A","B","C": 2 1 3
# $ q2   : Factor w/ 3 levels "X","Y","Z": 1 3 2
# $ other: Factor w/ 1 level "other": 1 1 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...