【问题标题】:Arrange by custom order in dplyr using dynamic column names使用动态列名在 dplyr 中按自定义顺序排列
【发布时间】:2018-02-27 18:41:19
【问题描述】:

我正在尝试根据某个列排列小标题(但根据变量动态设置的名称设置列)。

以下是我目前正在尝试但出现错误的代码。第二次粘贴代码有效(我在符号的列名中硬编码了我想根据变量设置的符号)。

library(tidyverse)

group_var <- "symbol"

date_seq <- seq(as.Date("2000-01-01"), as.Date("2009-12-31"), by = "days")
test_tbl <- tibble::tibble("date" = rep(date_seq, 3),
                           "symbol" = rep(c("test3", "test1", "test2"), each = length(date_seq)),
                           "value" = c(rnorm(length(date_seq), sd = 0.05),
                                       rnorm(length(date_seq), sd = 0.05),
                                       rnorm(length(date_seq), sd = 0.05)))

order_var <- c("test1", "test2", "test3")
test_tbl_final <- test_tbl %>%
  dplyr::arrange(factor(!!group_var, levels = order_var), date)

以下是有效的代码并显示了我要完成的工作:

library(tidyverse)

date_seq <- seq(as.Date("2000-01-01"), as.Date("2009-12-31"), by = "days")
test_tbl <- tibble::tibble("date" = rep(date_seq, 3),
                           "symbol" = rep(c("test3", "test1", "test2"), each = length(date_seq)),
                           "value" = c(rnorm(length(date_seq), sd = 0.05),
                                       rnorm(length(date_seq), sd = 0.05),
                                       rnorm(length(date_seq), sd = 0.05)))

order_var <- c("test1", "test2", "test3")
test_tbl_final <- test_tbl %>%
  dplyr::arrange(factor(symbol, levels = order_var), date)

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您也可以使用来自基本 R 的as.symbol

    test_tbl_final <- test_tbl %>%
      dplyr::arrange(factor(!!as.symbol(group_var), levels = order_var), date)
    

    【讨论】:

    • 谢谢,喜欢提到基本的 R 函数。
    【解决方案2】:

    您需要rlang:symgroup_var 从字符symbol 转换为符号symbol,然后使用!! 将符号评估为列对象:

    test_tbl %>% 
        arrange(factor(!!rlang::sym(group_var), levels = order_var), date)
    
    # A tibble: 10,959 x 3
    #         date symbol         value
    #       <date>  <chr>         <dbl>
    # 1 2000-01-01  test1  0.0519143671
    # 2 2000-01-02  test1 -0.0464782439
    # 3 2000-01-03  test1 -0.0295441613
    # ...
    

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 2021-04-02
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多