如何在 R 中的 mutate(across...) 上指定新突变的名称

fe1*_*108 5 r dplyr

在 R 中,当我使用 mutate across 时,对于新创建的列,我想删除现有列名称中的一串文本,然后在末尾添加后缀。

\n

这是一个例子:

\n

数据框:

\n
d <- data.frame(alpha_rate=1:3, beta_rate=4:6, gamma_rate=7:9)\n\nd\n  alpha_rate beta_rate gamma_rate\n1          1         4          7\n2          2         5          8\n3          3         6          9\n\nmy_function <- function(x) {(x*8)}\n\ncolumns_i_want <- c("alpha_rate", "beta_rate")\n\nd <- d %>% mutate(across(all_of(columns_i_want), my_function, .names = "{col}_new"))\n
Run Code Online (Sandbox Code Playgroud)\n

数据框现在具有以下列名称:

\n
    \n
  • “alpha_rate”、“beta_rate”、“gamma_rate”、“alpha_rate_new”、“beta_rate_new”
  • \n
\n

在名称参数中是否有一种方法可以将\xc2\xa0这些新创建的列称为此(即删除速率,然后添加后缀_new):

\n
    \n
  • “alpha_rate”、“beta_rate”、“gamma_rate”、“alpha_new”、“beta_new” \n\xc2\xa0
  • \n
\n

Ron*_*hah 9

您可以将 R 代码传递给.names-

library(dplyr)

columns_i_want <- c("alpha_rate", "beta_rate")

d %>% mutate(across(all_of(columns_i_want), my_function, 
             .names = "{sub('rate', 'new', col)}"))

#  alpha_rate beta_rate gamma_rate alpha_new beta_new
#1          1         4          7         8       32
#2          2         5          8        16       40
#3          3         6          9        24       48
Run Code Online (Sandbox Code Playgroud)