使用“时将字符转换为列名”;dplyr::mutate“;

使用“时将字符转换为列名”;dplyr::mutate“;,r,tidyverse,R,Tidyverse,我正在尝试动态创建列的名称,并在mutate Mydf的预测月份为“p1”、“p2” 我想计算与实际值的差异 我想输入的只是预测期代码,例如:“p1”来计算答案 样品df df您可以使用get()而不是按名称搜索对象: df1 <- df %>% mutate(mtd_rev_var = act_rev_mtd - get(paste0("rev_fcast_", reporting_mth))) 我们可以使用sym从rlang将其转换为符号,然后执行 df %>%

我正在尝试动态创建列的名称,并在
mutate

  • My
    df
    的预测月份为“p1”、“p2”
  • 我想计算与实际值的差异
  • 我想输入的只是预测期代码,例如:“p1”来计算答案
  • 样品df
    df您可以使用
    get()
    而不是
    按名称搜索对象:

    df1 <- df %>%
      mutate(mtd_rev_var = act_rev_mtd - get(paste0("rev_fcast_", reporting_mth)))
    

    我们可以使用
    sym
    rlang
    将其转换为符号,然后执行

    df %>%
        mutate(mtd_rev_var = act_rev_mtd - !!rlang::sym(paste0("rev_fcast_", reporting_mth)))
    #     product act_rev_mtd rev_fcast_p1 rev_fcast_p2 mtd_rev_var
    #1      aa         100          100          110           0
    #2      bb         110          100          110          10   
    #3      cc         120          100          110          20
    

    或者将其作为字符串传递到
    mutate_at

    df %>%
       mutate_at(vars(paste0("rev_fcast_", reporting_mth)), funs(mtd_rev_var = act_rev_mtd - .))
    

    我将使用
    get
    ,因为它非常适合我的管道。感谢您演示如何在
    上使用
    mutate\u,我从未想过这是可能的
    
    df1
      product act_rev_mtd rev_fcast_p1 rev_fcast_p2 mtd_rev_var
    1      aa         100          100          110           0
    2      bb         110          100          110          10
    3      cc         120          100          110          20
    
    df %>%
        mutate(mtd_rev_var = act_rev_mtd - !!rlang::sym(paste0("rev_fcast_", reporting_mth)))
    #     product act_rev_mtd rev_fcast_p1 rev_fcast_p2 mtd_rev_var
    #1      aa         100          100          110           0
    #2      bb         110          100          110          10   
    #3      cc         120          100          110          20
    
    df %>%
       mutate_at(vars(paste0("rev_fcast_", reporting_mth)), funs(mtd_rev_var = act_rev_mtd - .))