【发布时间】:2021-10-30 08:53:32
【问题描述】:
这是对以下问题的延伸:(1)、(2) 并在 cmets 中由Mario Reutter 向(2) 提问。
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)
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 和 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=), ...,它可能在函数之外工作,但对我来说不在函数内部。
【问题讨论】:
-
你是否已经在数据中创建了
_plus -
_plust是我之前在数据中创建的后缀示例。可能是_SD、_skew、……为什么?我不想改变我以前所做的一切的一般结构,但只有在我必须这样做的情况下。 -
即类似
df$speed1_SD <- 100000 -
嗯,它是一个数值向量;基本上是数据框中的一列。
-
我的意思是你在全局环境中有一个名为
n1_plus的向量对象,它不是数据的一部分。您是否希望将该对象创建为列(因为它不是“df”的一部分
标签: r function variables dplyr dynamic