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

R自定义dplyr mutate函数中动态生成新变量/列名并实现paste拼接

R自定义dplyr操作函数动态生成列名方案

最终实现函数

library(dplyr)
library(rlang)

my_fun <- function(dataf, V1, V2) {
  # 提取传入两个列的列名,拼接为新列名
  new_col <- paste(as_name(enquo(V1)), as_name(enquo(V2)), sep = "_")
  # 执行计算并动态赋值新列
  dataf %>% 
    mutate(
      !!new_col := paste0(
        format({{V1}}, big.mark = ","), 
        "\n(", 
        format({{V2}}, big.mark = ","), 
        ")"
      )
    )
}

调用方法

不需要手动输入列名字符串,也不需要传入df$列名格式的向量,直接传入裸列名即可,新列会自动按V1列名_V2列名的规则生成:

# 生成speed1_n1列
df <- df %>% my_fun(speed1, n1)
# 生成speed2_n2列
df <- df %>% my_fun(speed2, n2)

核心逻辑说明

  • enquo()函数会捕获用户传入的列表达式,不会直接对其求值
  • as_name()函数可以把捕获到的列表达式转换为对应的列名字符串,拼接后就得到动态生成的新列名
  • !!运算符会把拼接好的列名字符串注入到mutate的赋值位置,配合:=运算符完成动态列名的赋值
  • {{V1}}是tidy evaluation提供的简化语法,等价于!!enquo(V1),可以直接在dplyr动词中引用用户传入的列参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:45:03