2012-05-16 11 views
32

estoy trabajando con los números de acceso de NCBI secuencia de referencia, como variable de a:Quitar parte de la cadena después de "."

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

para obtener información del paquete BioMart tengo que quitar el .1, .2 etc. después de los números de acceso. Normalmente hago esto con este código:

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

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

Pero como puede ver, esta no es la forma correcta para esta variable. Puede alguien ayudarme con esto?

Respuesta

44

Sólo tiene que escapar del período:

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" 
+0

Aclaración: con funciones en el paquete base (es decir, sin otros paquetes como 'string r'), las opciones son las siguientes: b1 <- gsub (" \\ .. * "," ", a, fixed = FALSE) b2 <- sub (" \\ .. * "," ", a, fixed = FALSE) En ciertos casos, es posible que necesite cambiar el argumento' fixed'. Sin embargo, aquí usted * debe * tenerlo configurado en 'FALSE' (que es el predeterminado); de lo contrario, no funcionará. Además, necesitas el doble escape '\\', o recibes un error. –

+0

No lo usarías con fijo como VERDADERO porque estamos usando expresiones regulares aquí. – Hansi

3

Se podría hacer:

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

o

library(stringr) 
str_sub(a, start=1, end=-3) 
+0

Alternativas: 'str_replace (a," \\. [0-9] "," ")' y 'str_replace (a," \\ .. * *, "") ' – Paolo

3

podemos fingir que son los nombres de archivo y eliminar extensiones:

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