动态命名自定义函数dplyr内的新变量/列变异并粘贴 [英] dynamicaly name a new variable / column within a custom function dplyr mutate and paste

查看:0
本文介绍了动态命名自定义函数dplyr内的新变量/列变异并粘贴的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想稍微简化一下代码,并尝试使用自定义构建函数。我构建了以下虚拟对象:

library(dplyr, tidyverse)
##
string <- c("car", "train", 'bike', 'plain')
speed1 <- runif(4, min = 0, max = 10000)
speed2 <- runif(4, min = 0, max = 10000)
n1  <- sample(1:100, 4)
n2  <- sample(1:100, 4)
##
df <- data.frame(string, speed1, speed2, n1, n2)
df

基本上,我想做以下类型的简单操作:

df <- df%>%
 dplyr::mutate(speed1_n1 = paste0(format(speed1, big.mark   = ",") , '
(' , format(n1, big.mark   = ",") , ')'))
df

我可以构建函数:

my_fun <- function(dataf, V1, V2){
 dataf <- dataf%>%
dplyr::mutate(speed1_n1 = paste0(format(V1, big.mark   = ",") , '
(' , format(V2, big.mark   = ",") , ')'))}

df<-df%>%my_fun( df$speed1, df$n1)
df
但是,需要从被调用的变量名动态生成变量名,这与问题here类似,但在函数内。我不能手动指定mutate(speed1_n1=...。类似于:!!paste('speed1', 'n1', sep = "_"):=,但使用变量/列名而不是引号。

推荐答案

我们可以使用不带引号的参数,并使用{{}}进行评估

my_fun <- function(dataf, V1, V2){
   dataf %>%
   dplyr::mutate("{{V1}}_{{V2}}" := paste0(format({{V1}}, big.mark   = ",") ,
      '
(' , format({{V2}}, big.mark   = ",") , ')'))
}

-测试

my_fun(df, speed1, n1)
string   speed1   speed2 n1 n2       speed1_n1
1    car 7886.962 3218.585 37 83 7,886.962
(37)
2  train 9534.978 5524.649 98 34 9,534.978
(98)
3   bike 6984.790 9476.838 60 55 6,984.790
(60)
4  plain 6543.198 2638.609  9 53 6,543.198
( 9)

这篇关于动态命名自定义函数dplyr内的新变量/列变异并粘贴的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆