【问题标题】:Ordering factor levels using tidyeval使用 tidyeval 排序因子水平
【发布时间】:2018-09-11 15:03:14
【问题描述】:

我有一个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

我希望能够根据order 列重新排序x 的级别,如下所示:

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) 到函数。

【问题讨论】:

    标签: r tidyeval


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多