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
相关产品推荐
相关产品推荐

