Je voudrais savoir si/comment je peux transformer l'appel ci-dessous en une fonction qui peut être utilisée dans une tâche que je fais assez souvent avec mes données. Malheureusement, je n'arrive pas à trouver comment concevoir une fonction à partir de l'appel qui implique mutate
y case_when
ces deux fonctions reposent sur dplyr
et nécessite un certain nombre d'arguments supplémentaires.
Alternativement, l'appel lui-même me semble redondant avec tant de case_when
il est peut-être possible de réduire le nombre de fois où il est utilisé.
Toute aide et information sur des approches alternatives est la bienvenue.
L'appel ressemble à ceci :
library(dplyr)
library(stringr)
test_data %>%
mutate(
multipleoptions_o1 = case_when(
str_detect(multipleoptions, "option1") ~ 1,
is.na(multipleoptions) ~ NA_real_,
TRUE ~ 0),
multipleoptions_o2 = case_when(
str_detect(multipleoptions, "option2") ~ 1,
is.na(multipleoptions) ~ NA_real_,
TRUE ~ 0),
multipleoptions_o3 = case_when(
str_detect(multipleoptions, "option3") ~ 1,
is.na(multipleoptions) ~ NA_real_,
TRUE ~ 0),
multipleoptions_o4 = case_when(
str_detect(multipleoptions, "option4") ~ 1,
is.na(multipleoptions) ~ NA_real_,
TRUE ~ 0)
)
Les données de l'échantillon :
structure(list(multipleoptions = c("option1", "option2", "option3",
NA, "option2,option3", "option4")), row.names = c(NA, -6L), class = c("tbl_df",
"tbl", "data.frame"))
Sortie souhaitée de la fonction :
structure(list(multipleoptions = c("option1", "option2", "option3",
NA, "option2,option3", "option4"), multipleoptions_o1 = c(1,
0, 0, NA, 0, 0), multipleoptions_o2 = c(0, 1, 0, NA, 1, 0), multipleoptions_o3 = c(0,
0, 1, NA, 1, 0), multipleoptions_o4 = c(0, 0, 0, NA, 0, 1)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -6L))
Les arguments de la fonction devraient probablement être : data
(c'est-à-dire l'ensemble des données d'entrée), multipleoptions
(c'est-à-dire la colonne des données contenant les options de réponse, toujours une colonne), patterns_to_look_for
(i.e., str_detecter les motifs à rechercher dans les options multiples), number_of_options
Dans l'idéal, le nombre d'options peut être supérieur ou inférieur à 4 (je ne suis pas sûr que ce soit réalisable), output_columns
(c'est-à-dire les noms des nouvelles colonnes, c'est toujours le nom de la colonne d'origine suivi du numéro de l'option ou du nom de l'option).