Je souhaite utiliser le nom d'une colonne dans une fonction, sans la donner explicitement comme argument à cette fonction, appelée dans un rangé (dplyr
, , purrr
, ...). C'est parce que je voudrais utiliser cette fonction sur de nombreuses colonnes (par exemple avec mutate_all
et map
), et non mutate
chaque colonne séparément.Obtention du nom d'une colonne en tant qu'argument supplémentaire pour fonctionner dans un tube mutate_all tidy
Exemple:
Disons que je voudrais chaque valeur dans chaque colonne à préfixé par ce nom de colonne et un trait de soulignement. Les travaux suivants:
library(dplyr)
library(purrr)
library(stringr)
tib <- tibble(a = 1:3, b = 4:6, c = 7:9)
f <- function(value, column_name) {
str_c(column_name, "_", value)
}
tib %>%
mutate(a = map_chr(a, f, "a"),
b = map_chr(b, f, "b"),
c = map_chr(c, f, "c"))
# A tibble: 3 x 3
a b c
<chr> <chr> <chr>
1 a_1 b_4 c_7
2 a_2 b_5 c_8
3 a_3 b_6 c_9
Mais que faire si j'ai >> 3 colonnes?
Il serait agréable d'avoir une fonction qui trouve le nom de la colonne par lui-même, je peux utiliser mutate_all
:
f2 <- function(value) {
column_name <- miraculously_get_column_name()
str_c(column_name, "_", value)
}
tib %>%
mutate_all(f2)
Mais ce n'est pas qui va se passer. Un souhait sans doute plus réaliste est d'entrer comme un argument supplémentaire pour mutate_all
une expression qui trouve le nom de colonne à chaque colonne et utiliser la f
originale, quelque chose comme:
tib %>%
mutate_all(f, get_column_name_somehow())
Alors, comment dois-je faire cela avec un tuyau (et s'il y a un autre moyen et aucun moyen de le faire avec un tuyau bien rangé, alors allons-y).
C'est incroyable, mon seul question est que je ne comprends pas. Mais c'est sur moi, merci. 'map2_dfr'? Qu'est-ce qui s'est passé à 'map2_df'? –
oui 'map_df' fonctionne aussi, c'est dans l'index du paquet mais pas dans le document,' map_df', 'map_dfr' et' map_dfc' donnent le même résultat ici –
Le point dans 'noms (.)' Appelle l'entrée principale , 'tib' dans ce cas –