2011-07-22 14 views
6

que necesito para volver a dar forma a mi trama de datos utilizando expresiones regulares y, en particular, este tipo de línea deR- cuestión expresión regular

X21_GS04.A.mzdata 

debe convirtió:

GS04.A 

He probado

pluto <- sub('^X[0-90_]+','', my.data.frame$File.Name, perl=TRUE) 

y funciona; de lo que probé

pluto <- sub('.mzdata$','', my.data.frame$File.Name, perl=TRUE) 

y funciona también.

El problema es que no tengo ni idea de cómo combinar los dos en un solo código, He probado una secuencia de comandos esta

pluto <- sub('^X[0-90_]+ | .mzdata$','', my.data.frame$File.Name, perl=TRUE) 

pero nada appens. ¿Puede alguien decirme dónde me equivoco?

Mejor Riccardo

Respuesta

2

espacio Eliminar en su expresión regular. También escapar . Char: \., es decir:

^X[0-9]+_|\.mzdata$ 
+0

No necesita dos caracteres de escape antes del punto, es decir, '' \\ $ mzData en R.? – Henrik

+0

@Henrik, ¿Por qué? '\ .' escapa char' .' ​​de regex. No tengo ni idea, necesita que '' escape '' char 'en R. –

+0

en mi pc, ninguno de los dos funciona en R. Tu versión arroja un error (Error: '\' 'es un escape no reconocido en cadena de caracteres que comienza"^X [0-9] + _ | \. ") Y con' \\. 'No elimina la parte .mzdata. Normalmente, siempre se necesitan dos '\\' en R como carácter de escape para escapar del '\' mismo. – Henrik

9

La expresión regular que está buscando es la siguiente:

^X\d+_(.*)\.mzdata$ 

Esto corresponderá con toda su expresión y la captura de la parte que desea conservar en un grupo. Ahora puede reemplazar esto por \1 (una referencia al grupo de captura).

En R, esto sería:

result <- sub('^X\\d+_(.*)\\.mzdata$', '\\1', my.data.frame$File.Name, perl=TRUE) 
+0

¡Gracias! ¡No entiendo claramente lo que has hecho pero te agradezco! – Riccardo

+0

La clave de la respuesta de Konrad es volver a hacer referencia. Vea esta discusión reciente http://stackoverflow.com/questions/6757465/r-regex-store-variables/6757892#6757892 –