Comment supprimer une partie d'une chaîne ? Par exemple dans ATGAS_1121
je veux tout supprimer avant _
.
Réponses
Trop de publicités?Utilisez des expressions régulières. Dans ce cas, vous pouvez utiliser gsub
:
gsub("^.*?_","_","ATGAS_1121")
[1] "_1121"
Cette expression régulière correspond au début de la chaîne (^), à tout caractère (.) répété zéro ou plusieurs fois (*) et au trait de soulignement (_). Le ? rend la correspondance "paresseuse" afin que seules les correspondances soient éloignées du premier trait de soulignement. Ce match est remplacé par juste un trait de soulignement. Voir ?regex
pour plus de détails et de références
Si vous êtes du genre Tidyverse, voici la solution stringr :
R> library(stringr)
R> strings = c("TGAS_1121", "MGAS_1432", "ATGAS_1121")
R> strings %>% str_replace(".*_", "_")
[1] "_1121" "_1432" "_1121"
# Or:
R> strings %>% str_replace("^[A-Z]*", "")
[1] "_1121" "_1432" "_1121"
Voici la strsplit
pour un dataframe utilisant le package dplyr
col1 = c("TGAS_1121", "MGAS_1432", "ATGAS_1121")
col2 = c("T", "M", "A")
df = data.frame(col1, col2)
df
col1 col2
1 TGAS_1121 T
2 MGAS_1432 M
3 ATGAS_1121 A
df<-mutate(df,col1=as.character(col1))
df2<-mutate(df,col1=sapply(strsplit(df$col1, split='_', fixed=TRUE),function(x) (x[2])))
df2
col1 col2
1 1121 T
2 1432 M
3 1121 A