Уровни факторов упорядочения с использованием tidyeval

У меня есть dataframe который выглядит так:

my_df <- data.frame(
  x = c("V1", "V2", "V3", "V4"),
  score = c(1, 4, 6, 3),
  order = c(1, 4, 3, 2)
)

Уровни my_df$x выглядеть так:

> my_df$x
[1] V1 V2 V3 V4
Levels: V1 V2 V3 V4

Я хочу иметь возможность изменить порядок уровней x на основе order столбец как это:

my_df_ <- my_df %>% 
  mutate(x = factor(x, x[order]))
my_df_$x
[1] V1 V2 V3 V4
Levels: V1 V4 V3 V2

Но я хочу быть в состоянии сделать это в функции, используя tidyeval и не могу для меня, как понять, как... Я счастлив, что могу передать любую строку ("x") или выражения (x) к функции.

1 ответ

Потенциальное решение с использованием forcats будет что-то вроде:

my_fn <- function(df, x, o) {

  o_ <- enquo(o)
  x_ <- enquo(x)
  x_name <- quo_name(x_)

  df %>% 
    mutate(!!x_name := fct_reorder(!!x_, !!o_))
}
my_fn(my_df, x, order)
Другие вопросы по тегам