Expression régulière R :Remplacer la liste entière de chaînes par des informations plus spécifiques

StackOverflow https://stackoverflow.com//questions/23048595

  •  21-12-2019
  •  | 
  •  

Question

Si j'ai des données avec une variable catégorielle contenant des éléments tels que "Q7", "Q2", etc., comment puis-je le remplacer par "7 Queen", "2 Queen", etc.?

Était-ce utile?

La solution

Pour commencer, vous tirerez le meilleur parti de poser une question si vous incluez également le code de ce que vous avez déjà essayé.Cela dit...

Ce n'est peut-être pas le moyen le plus efficace de résoudre ce problème pour les grands ensembles de données, mais ces deux méthodes semblent très bien fonctionner dans votre exemple. example(strsplit) a une belle fonction d'inversion de chaîne que nous pouvons utiliser.

> strReverse <- function(x)
      sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")

> strg <- c("Q7", "Q2")
> GS <- gsub("Q", strReverse(" Queen"), strg)
> strReverse(GS)
[1] "7 Queen" "2 Queen"

Une autre façon serait d'utiliser paste

> S <- paste0(strReverse(strg), "ueen")
> gsub("Q", " Q", S)
[1] "7 Queen" "2 Queen"

Autres conseils

Expression régulière

(Q)(\d)

Remplacer l'expression régulière

$2 Queen

Regular expression visualization

Démo de débogage

Description

1st Capturing group (Q)
    Q matches the character Q literally (case insensitive)
2nd Capturing group (\d)
    \d match a digit [0-9]
g modifier: global. All matches (don't return on first match)
i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])

Note: Vous en auriez besoin d'un pour chaque lettre

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top