这是以下问题的延伸:(1), (2)并在评论中要求(2) by 马里奥路特.
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)
n1_plus <- sample(1:100, 4)
n1_minus <- sample(1:100, 4)
n2 <- sample(1:100, 4)
df <- data.frame(string, speed1, speed2, n1, n2, n1_plus, n1_minus)
谢谢akrun's answer我可以构建以下函数:
my_fun <- function(dataf, V1, V2){
dataf %>%
dplyr::mutate("{{V1}}_{{V2}}" := paste0(format({{V1}}, big.mark = ",") ,
'\n(' , format({{V2}}, big.mark = ",") , ')'))}
df<-df%>%my_fun(speed1, n1)
创建一个具有复合名称的新变量,其定义为"{{V1}}_{{V2}}" :=
.
但是,我如何在等式右侧调用复合变量名称呢?例如。替代format({{V2}}, big.mark = ",")
与类似的东西format('{{V2}}_plus', big.mark = ",")
。我试过 (不工作):
my_fun <- function(dataf, V1, V2){
dataf %>%
dplyr::mutate("{{V1}}_{{V2}}_plus" := paste0(format({{V1}}, big.mark = ",") ,
'\n(' , format('{{V2}}_plus', big.mark = ",") , ')'))}
df<-df%>%my_fun(speed1, n1)
期望的输出:我希望有一个新专栏speed1_n1_plus
结合了来自的值speed1
and n1_plus
:
string speed1 speed2 n1 n2 n1_plus n1_minus speed1_n1_plus
1 car 3958.415 1049.172 70 91 25 53 3,958.415\n(25)
2 train 6203.919 8639.160 52 92 14 91 6,203.919\n(14)
3 bike 2966.391 2997.303 35 55 46 61 2,966.391\n(46)
4 plain 2755.266 1627.379 98 66 8 49 2,755.266\n( 8)
我只需对具有相似名称的多个变量进行操作即可。变量名称是“核心”名称的组合(在本例中为“n1”,{{V2}}
) 以及后缀和前缀。我想避免为每个变量名称添加额外的参数,因为它仅向核心名称添加后缀。
我正在尝试:!!paste0, as.name(), eval(parse(text=), ...,这可能在函数外部工作,但对我来说不在函数内部。