Quero criar uma função que tome como primeiro argumento o nome de um conjunto de dados e, como segundo argumento, parte do nome de uma coluna do dataframe. Quero então usar glue
para construir dinamicamente o nome da coluna, na função, e usar essa coluna em uma mutate
chamada, assim:
library(tidyverse)
tmp <-
function(data, type){
var <- glue::glue("Sepal.{type}")
iris |>
select({{var}}) |>
mutate("{var}" := mean({{var}}))
}
Eu tentei muitas coisas, mas tenho dificuldade em encontrar uma solução em que a coluna seja chamada tanto pelo nome da nova coluna (aqui, "{var}"
) quanto pelo cálculo da nova coluna (aqui, mean({{var}})
). O que se deve fazer nesses casos?
Aqui, a chamada tmp(iris, "Length")
deve retornar um 150x1
data.frame com o valor médio em todas as linhas.
tidyverse
solução são preferidas ou quaisquer respostas baseadas em pipe.
Você pode usar
mean({{var}})
se modificar um pouco seu código, por exemplo, usandoas.symbol
to definevar
, em vez de umglue
charPara algumas alternativas, acho que você pode tentar
get(var)
ou!!rlang::syms(var)
, por exemploou
Aqui está uma tentativa de pipe usando base, pena que não consigo encontrar uma maneira de usar o nome da variável dinâmica dentro de transform .
É isso que você está procurando?
Para
select()
variáveis usando um vetor de caracteres, basta usarall_of()
. E se você estiver selecionando apenas a variável a ser transformada, poderá usarmutate(across(everything(), f)
para evitar a especificação do nome da variável.