动态命名自定义函数dplyr内的新变量/列变异并粘贴自定义、变量、函数、动态

由网友(the fox!)分享简介:我想稍微简化一下代码,并尝试使用自定义构建函数。我构建了以下虚拟对象:library(dplyr, tidyverse)##string <- c("car", "train", 'bike', 'plain')speed1 <- runif(4, min = 0, max = 10000)speed2 <-...

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

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)
阅读全文

相关推荐

最新文章