我想创建一个函数,该函数将数据集的名称作为第一个参数,将数据帧中列名称的一部分作为第二个参数。然后,我想glue
在函数中动态构造列名称,并在调用中使用该列mutate
,如下所示:
library(tidyverse)
tmp <-
function(data, type){
var <- glue::glue("Sepal.{type}")
iris |>
select({{var}}) |>
mutate("{var}" := mean({{var}}))
}
我已经尝试了很多方法,但我很难找到一种解决方案,其中该列既可以用于新列的名称(此处为"{var}"
),也可以用于新列的计算(此处为mean({{var}})
)。遇到这种情况应该怎么办?
在这里,调用tmp(iris, "Length")
应该返回一个150x1
data.frame,其中包含所有行的平均值。
tidyverse
首选解决方案,或任何基于管道的答案。
mean({{var}})
如果您稍微修改一下代码,您就可以使用,例如,使用as.symbol
来定义var
,而不是glue
char对于某些替代方案,我想您可以尝试
get(var)
或!!rlang::syms(var)
,例如或者
这是使用 base 的管道尝试,遗憾的是我找不到在Transform中使用动态变量名称的方法。
这是你想要的?
对于
select()
使用字符向量的变量,只需使用all_of()
. 如果您仅选择要转换的变量,则可以使用mutate(across(everything(), f)
避免指定变量名称。