1
votes

Remplacer les motifs séparés par un délimiteur dans R

Je dois supprimer les valeurs correspondant à "CBII _ * _ * _" avec "MAP_" dans le vecteur tt ci-dessous.

tt <- c ("CBII_27_1018_62770", "CBII_2733_101448_6272", "MAP_1222")

J'ai essayé

gsub ("CBII _ * _ *", "MAP_") qui ne donnera pas le résultat attendu. Quelle serait la solution pour cela pour que j'obtienne:

"MAP_62770", "MAP_6272", "MAP_1222"

r

0 commentaires

3 Réponses :


2
votes

Vous pouvez utiliser:

[1] "MAP_62770" "MAP_6272"  "MAP_1222"

ou

stringr::str_replace(tt, "^CBII_.*_.*_", "MAP_")

Sortie

gsub("^CBII_.*_.*_", "MAP_",tt)


0 commentaires

1
votes

Une option avec trimws de base R avec coller . Nous spécifions les espaces sous forme de caractères (. * ) jusqu'au _ . Ainsi, il supprime la sous-chaîne jusqu'au dernier _ puis avec paste concatène une nouvelle chaîne ("MAP_")

paste0("MAP_", trimws(tt, whitespace = ".*_"))
#[1] "MAP_62770" "MAP_6272"  "MAP_1222" 


0 commentaires

0
votes
sub(".*(?<=_)(\\d+)$", "MAP_\\1", tt, perl = T)
[1] "MAP_62770" "MAP_6272"  "MAP_1222"
Here we use positive lookbehind to assert that there is an underscore _ on the left of the capturing group (\\d+) at the very end of the string ($); we recall that capturing group with \\1 in the replacement argument to sub and move MAP_in front of it.

0 commentaires