使用“时将字符转换为列名”;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
df
的预测月份为“p1”、“p2”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 - .))