2011-07-22 19 views
6

yeniden şekil benim veri çerçevesini Regexp'i kullanarak ve özellikle R- ihtiyacım regexp'in soru

X21_GS04.A.mzdata 

oldu gerekir hattının

bu tür için:

GS04.A 

Ben

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

ve çalışır; Ben,

'u denedim ve çok çalışıyor.

sorun

nasıl birinde iki kod birleştirmek için hiçbir fikrim yok yani, ben bir komut dosyası böyle bu

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

uğraş ama hiçbir şey appens. Birisi bana yanlış nerede söyleyebilirim? senin regex

En Riccardo

cevap

2

Kaldır alanı.

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

Bu senin tüm anlatım maç ve korumak istediğiniz kısmını ele olacaktır:

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

R ', sen yani nokta önce iki çıkış karakterleri gerekmez \\ mzdata $' do? – Henrik

+0

@Henrik, Neden? '\.' regex'in char '.'sinden kaçar. Hiç bir fikrim yok, char \ '' ın PC'de –

+0

'dan kaçmasına gerek yok, ne de R.'de çalışıyor. Sürümünüz bir hata atar (Hata: '\.' Karakter dizisinde tanınmayan bir hatadır "^ X [0-9] + _ | \. ") Ve' \\. 'Ile .mzdata bölümünü silmez. Normalde, her zaman R'de, '\' kendisinden kaçmak için bir kaçış karakteri olarak iki \ 'ye ihtiyacın vardır. – Henrik

9

peşinde olduğunuz düzenli ifade şudur: \., yani: Ayrıca . kömürü kaçış grup içinde. Şimdi bunu \1 (yakalama grubuna yapılan referans) ile değiştirebilirsiniz.

Ar ise

bu olurdu.

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

Teşekkürler! Ne yaptığınızı tam olarak anlamadım ama teşekkür ederim! – Riccardo

+0

Konrad'ın cevabının anahtarı geri göndermedir. Bu yeni tartışmaya bakın http://stackoverflow.com/questions/6757465/r-regex-store-variables/6757892#6757892 –