web-dev-qa-db-fra.com

Supprimer une partie de la chaîne après "."

Je travaille avec les numéros d’accession à la séquence de référence NCBI comme la variable a:

a <- c("NM_020506.1","NM_020519.1","NM_001030297.2","NM_010281.2","NM_011419.3", "NM_053155.2")  

Pour obtenir des informations sur le paquet biomart, je dois supprimer le .1, .2 etc. après les numéros d’accession. Je le fais normalement avec ce code:

b <- sub("..*", "", a)

# [1] "" "" "" "" "" ""

Mais comme vous pouvez le constater, ce n'est pas la bonne manière pour cette variable. Est-ce que quelqu'un peut m'aider avec ça?

60
Lisann

Vous avez juste besoin d'échapper à la période:

a <- c("NM_020506.1","NM_020519.1","NM_001030297.2","NM_010281.2","NM_011419.3", "NM_053155.2")

gsub("\\..*","",a)
[1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155" 
79
Hansi

Nous pouvons prétendre qu'ils sont des noms de fichiers et supprimer extensions:

tools::file_path_sans_ext(a)
# [1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155"
10
zx8754

Vous pourriez faire:

sub("*\\.[0-9]", "", a)

ou

library(stringr)
str_sub(a, start=1, end=-3)
6
johannes

Si la chaîne doit avoir une longueur fixe, alors substr de base R peut être utilisé. Mais on peut avoir la position du . avec regexpr et l’utiliser dans substr

substr(a, 1, regexpr("\\.", a)-1)
#[1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155"   
2
akrun