【问题标题】:How I specify the newly mutated names on mutate(across...) in R我如何在 R 中的 mutate(across...) 上指定新的变异名称
【发布时间】:2021-10-16 11:01:35
【问题描述】:

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

这是一个例子:

数据框:

d <- data.frame(alpha_rate=1:3, beta_rate=4:6, gamma_rate=7:9)

d
  alpha_rate beta_rate gamma_rate
1          1         4          7
2          2         5          8
3          3         6          9

my_function <- function(x) {(x*8)}

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

d <- d %>% mutate(across(all_of(columns_i_want), my_function, .names = "{col}_new"))

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

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

有没有办法在 names 参数中 将这些新创建的列改为 this(即删除 rate,然后删除后缀 _new):

  • “alpha_rate”、“beta_rate”、“gamma_rate”、“alpha_new”、“beta_new”

【问题讨论】:

  • 您可以使用命名参数和带有.names 的函数。有关更多信息,请参阅here。欢迎来到 SO!
  • 你也可以使用rename_with函数。
  • 所以“命名参数”将是我想要的“_new”位,该函数将用于指定列名的第一位 - 中的“alpha”和“beta”位这个例子?该函数是否必须在 mutate(across ) 之外定义?感谢您的欢迎 :)

标签: r dplyr


【解决方案1】:

你可以在.names传递R代码-

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

【讨论】:

    【解决方案2】:

    不是您要求的,而是简洁快速的 data.table 版本:

    require(data.table)
    require(stringr)
    # data
    d = data.frame(alpha_rate = 1:3,
                   beta_rate = 4:6,
                   gamma_rate = 7:9)
    setDT(d)
    # function
    my_function = function(x) {(x*8)}
    # code
    cols = c("alpha_rate", "beta_rate")
    cols_new = str_replace(cols, 'rate', 'new')
    d[ , (cols_new) := lapply(.SD, my_function), .SDcols = cols ]
    d
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-01
      • 2021-08-30
      • 2022-01-15
      • 2022-01-01
      • 2018-08-13
      • 2021-11-11
      • 2021-01-11
      • 2022-08-23
      相关资源
      最近更新 更多