Измените уровни коэффициента в R, используя переменную для ОБА имени фактора И порядок уровней в кадре данных - PullRequest
1 голос
/ 11 апреля 2019

У меня есть большой фрейм данных 1 с большим количеством столбцов, которые являются факторами. Я хочу изменить порядок уровней факторов для каждого фактора.

У меня есть кадр данных поиска 2 для правильных порядковых уровней. Это означает, что я могу ссылаться на кадр данных поиска, используя переменную для фактора. Я могу взять заказ и поместить его в другую переменную. Пока все хорошо.

Упрощенный пример:

d = tibble(
  size = c('small','small','big', NA)
)
d$size = as.factor(d$size)

levels(d$size) # Not what I want.

proper.order = c('small', 'big') # this comes from somewhere else

Я могу использовать proper.order, чтобы изменить один столбец в d.

d$size = factor(d$size, levels = proper.order)

levels(d$size) # What I want.

Я хочу сослаться на имя столбца (size), используя переменную.

Это не работает:

my.column = 'size'

d[names(d) == my.column] = factor(d[names(d) == my.column], levels = proper.order, exclude = NULL)


levels(d$size) # What I want.
d # Not what I want.

Я ожидаю увидеть этот фактор переупорядоченным. Бывает. Я ожидаю, что фактор сохранит свои значения (очевидно). Все они установлены на NA.

Я подозреваю, что это потому, что d[names(d) == my.column] - это не фактор, а беда Но тогда почему уровни факторов меняются? И как я могу добраться до тибля и схватить фактор?

1 Ответ

2 голосов
/ 11 апреля 2019

Для нескольких столбцов мы можем указать в mutate_at

library(dplyr)
d %>% 
   mutate_at(vars(my.column), 
        list(~ factor(., levels = proper.order, exclude = NULL)))

Или с fct_relevel из forcats

library(forcats)
d %>%
    mutate_at(vars(my.column), list(~ fct_relevel(., proper.order))) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...