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"
3 Réponses :
Vous pouvez utiliser:
[1] "MAP_62770" "MAP_6272" "MAP_1222"
ou
stringr::str_replace(tt, "^CBII_.*_.*_", "MAP_")
Sortie
gsub("^CBII_.*_.*_", "MAP_",tt)
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"
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.