J'essaye d'écrire une fonction qui prend comme un de ses arguments un vecteur de noms de colonne de l'utilisateur. Les noms de colonne seront utilisés pour spécifier quelles colonnes de l'ensemble de données seront collées ensemble pour former une nouvelle colonne dans dplyr :: mutate. J'ai d'abord essayé de replier les éléments du vecteur d'argument puis d'utiliser la chaîne repliée dans mutate - c'est faux. Voir cette dernière tentative ci-dessous. J'ai fait d'autres tentatives mais je ne comprends pas le nouveau quo, enquo, UQ, !!!, !!, et ainsi de suite au sein de dplyr. Quelqu'un peut-il montrer ce que j'ai besoin de faire?Passer le vecteur des noms de colonne à paste() dans mutate (dplyr)
df <- data.frame(.yr = c("2000", "2001", "2002"), .mo = c("12", "01", "02"), .other = rnorm(3))
cols <- colnames(df)[1:2]
do_want <- df %>%
mutate(new = paste(.yr, .mo, sep = "-"))
my_func <- function(dat, vars){
.vars <- paste(vars, collapse = ",")
result <- dat %>%
mutate(new = paste(.vars, sep = "-"))
return(result)
}
my_func(dat = df, vars = cols)
edit: ceci est ma tentative d'utiliser quo et !! dans la définition de la fonction. le résultat est une colonne de chaîne répétée ".an, .mo"
my_func <- function(dat, vars){
.vars <- quo(paste(vars, collapse = ","))
result <- dat %>%
mutate(new = paste(!!.vars, sep = "-"))
return(result)
}
Merci - J'ai fait une tentative comme celle-ci mais je n'ai pas enveloppé la pâte intérieure entre guillemets. Cela fonctionne, espérant toujours que quelqu'un puisse montrer une solution qui utilise la nouvelle fonctionnalité rLang qui rend mutate_ superflu et est plus élégant que 3 pâtes imbriquées. – mb158127
'mutate_' et similaires sont obsolètes dans dplyr maintenant. –