1
votes

Remplacez plusieurs chaînes comprenant un nombre différent de caractères par un gsubfn ()

Ici Remplacez plusieurs chaînes dans une instruction gsub () ou chartr () dans R? il est expliqué de remplacer plusieurs chaînes d'un caractère at dans une instruction par gsubfn () . Par exemple :

x <- "doremi g-k"
gsubfn(".", list("-" = "_", "doremi" = ""), x)
# "doremi g_k"

Je voudrais cependant remplacer la chaîne 'doremi' dans l'exemple par ''. Cela ne fonctionne pas:

x <- "doremi g-k"
gsubfn(".", list("-" = "_", " " = ""), x)
# "doremig_k"

Je suppose que c'est à cause du fait que la chaîne 'doremi' contient plusieurs caractères et moi utilisant le métacaractère . dans gsubfn . Je ne sais pas par quoi le remplacer - je dois avouer que je trouve parfois l'utilisation des métacaractères un peu difficile à comprendre. Alors, y a-t-il un moyen pour moi de remplacer «-» et «doremi» à la fois?


0 commentaires

3 Réponses :


3
votes

Est-ce que cela fonctionne pour vous?

gsubfn::gsubfn(pattern = "doremi|-", list("-" = "_", "doremi" = ""), x)
[1] " g_k"

La clé est cette recherche: "doremi | -" qui indique de rechercher soit "doremi" ou "-" . Utilisez "|" comme opérateur ou .


0 commentaires

4
votes

Vous pourrez peut-être simplement utiliser le sub de base R ici:

x <- "doremi g-k"
result <- sub("doremi\\s+([^-]+)-([^-]+)", "\\1_\\2", x)
result

[1] "g_k"


0 commentaires

3
votes

Juste une solution plus générique à la solution de @ RLave -

toreplace <- list("-" = "_", "doremi" = "")
gsubfn(paste(names(toreplace),collapse="|"), toreplace, x)
[1] " g_k"


0 commentaires