【问题标题】:mutate-across: truncated names for output columns [duplicate]mutate-across:输出列的截断名称[重复]
【发布时间】:2021-08-30 01:11:38
【问题描述】:

当使用 mutate-across 时,我了解到 .names 参数可用于命名输出列。如果所需的列名只是原始名称的截断,如何执行截断?在下面的示例中,我使用 rename_with 来实现预期的结果,我想知道是否可以直接调整 .names 参数以产生相同的结果。

df <- mtcars %>% head(5) %>% dplyr::select(am, wt_mtcars = wt , qsec_mtcars=qsec) 
df
                  wt_mtcars qsec_mtcars
Mazda RX4             2.620       16.46
Mazda RX4 Wag         2.875       17.02
Datsun 710            2.320       18.61
Hornet 4 Drive        3.215       19.44
Hornet Sportabout     3.440       17.02



df %>% 
mutate (across (contains("mtcars"), ~ .*10, .names = "{col}_1")) %>% ## perform a meaningless operation in .fns
  rename_with(~str_remove(., "_mtcars_1"), contains("_mtcars_1"))

                  am wt_mtcars qsec_mtcars    wt  qsec
Mazda RX4          1     2.620       16.46 26.20 164.6
Mazda RX4 Wag      1     2.875       17.02 28.75 170.2
Datsun 710         1     2.320       18.61 23.20 186.1
Hornet 4 Drive     0     3.215       19.44 32.15 194.4
Hornet Sportabout  0     3.440       17.02 34.40 170.2


【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    您可以将函数传递为.names中的字符串应用-

    library(dplyr)
    
    df %>% 
      mutate(across(contains("mtcars"), ~ .*10,
                    .names = '{stringr::str_remove(.col, "_mtcars")}'))
    
    #                  am wt_mtcars qsec_mtcars    wt  qsec
    #Mazda RX4          1     2.620       16.46 26.20 164.6
    #Mazda RX4 Wag      1     2.875       17.02 28.75 170.2
    #Datsun 710         1     2.320       18.61 23.20 186.1
    #Hornet 4 Drive     0     3.215       19.44 32.15 194.4
    #Hornet Sportabout  0     3.440       17.02 34.40 170.2
    

    这里.col代表当前列名。

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 1970-01-01
      • 2021-11-11
      • 2020-05-19
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2014-09-28
      相关资源
      最近更新 更多