在自定义函数 dplyr mutate and paste 中动态命名新变量/列
dynamicaly name a new variable / column within a custom function dplyr mutate and paste
我想稍微简化我的代码,并尝试参与自定义构建函数的世界。我构建了以下虚拟对象:
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 = ",") , '\n(' , format(n1, big.mark = ",") , ')'))
df
我可以构建一个函数:
my_fun <- function(dataf, V1, V2){
dataf <- dataf%>%
dplyr::mutate(speed1_n1 = paste0(format(V1, big.mark = ",") , '\n(' , 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 = ",") ,
'\n(' , 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\n(37)
2 train 9534.978 5524.649 98 34 9,534.978\n(98)
3 bike 6984.790 9476.838 60 55 6,984.790\n(60)
4 plain 6543.198 2638.609 9 53 6,543.198\n( 9)
我想稍微简化我的代码,并尝试参与自定义构建函数的世界。我构建了以下虚拟对象:
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 = ",") , '\n(' , format(n1, big.mark = ",") , ')'))
df
我可以构建一个函数:
my_fun <- function(dataf, V1, V2){
dataf <- dataf%>%
dplyr::mutate(speed1_n1 = paste0(format(V1, big.mark = ",") , '\n(' , 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 = ",") ,
'\n(' , 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\n(37)
2 train 9534.978 5524.649 98 34 9,534.978\n(98)
3 bike 6984.790 9476.838 60 55 6,984.790\n(60)
4 plain 6543.198 2638.609 9 53 6,543.198\n( 9)