You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr的mutate+across时如何保留原列并自动重命名新列

问题描述

当我使用mutate配合across处理数据时,.cols参数选中的列会被转换后的结果直接覆盖。我需要同时满足两个需求:

  • 输出结果中保留.cols选中的所有原始列
  • 新生成的列可以自动按规则统一重命名

解决方案

dplyr的across函数内置了.names参数,专门用来处理这类场景,无需额外做表拼接或单独重命名:

  • 你可以在.names参数中用{col}作为原始列名的占位符,自定义新列的命名规则
  • 只要设置了.names参数,mutate就不会覆盖原有列,而是将计算结果作为新列追加到数据集末尾

示例代码如下:

require(dplyr)
require(magrittr)
set.seed(7337)

# 生成测试数据
myTibble <- tibble(x = 1:10,
                   y = runif(10),
                   z = y * pi)

# 直接一行实现保留原列+自动重命名新列
myTibble %>% 
  mutate(across(everything(), multiply_by, 2, .names = "{col}_double"))

运行后输出结果和需求完全匹配:

# A tibble: 10 × 6
       x      y     z x_double y_double z_double
   <int>  <dbl> <dbl>    <dbl>    <dbl>    <dbl>
 1     1 0.890  2.80         2 1.78      5.59   
 2     2 0.329  1.03         4 0.658     2.07   
 3     3 0.0527 0.166        6 0.105     0.331  
 4     4 0.873  2.74         8 1.75      5.49   
 5     5 0.667  2.10        10 1.33      4.19   
 6     6 0.508  1.60        12 1.02      3.19   
 7     7 0.598  1.88        14 1.20      3.75   
 8     8 0.00397 0.0125      16 0.00794   0.0249 
 9     9 0.0541 0.170        18 0.108     0.340  
10    10 0.868  2.73        20 1.74      5.46   

如果需要更复杂的命名规则,也可以在.names里灵活调整,比如加前缀的话设置为"double_{col}"即可。

内容的提问来源于stack exchange,提问作者Captain Hat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:57:03