动态命名自定义函数dplyr内的新变量/列变异并粘贴 [英] dynamicaly name a new variable / column within a custom function dplyr mutate and paste
本文介绍了动态命名自定义函数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屋!
查看全文