2013-07-30 10 views
6

Próbuję znaleźć funkcję, która będzie wyodrębniać znaki w określonej pozycji w ciągu znaków. Na przykład, mam długą nazwę pliku z datą w nim i chcę skończyć tylko daty:Wyodrębnianie znaków w ustawionym położeniu

'LT50420331984221PAC00_B7.tif' 

i chcę tylko „1984221” porcję. Mam skomplikowaną funkcję, ale zastanawiałem się, czy istnieje bardziej eleganckie rozwiązanie.

+0

Nie widzę, jak będzie można uzyskać odpowiedź za pomocą dostarczonych informacji. Czy fragment daty: zawsze zaczyna się po znakach 'n'? Zawsze zaczynaj od '19XX' lub' 20XX'? Zawsze uruchamiaj dla znaków 'n'? Czy możesz podać więcej informacji, które ułatwiłyby odpowiedź? – thelatemail

+0

Czy możesz dodać swoje rozwiązanie do PO? – agstudy

+0

Wszystko jest wyjaśnione w wikibookingu programowania R: http://en.wikibooks.org/wiki/R_Programming/Text_Processing – PAC

Odpowiedz

13

Jeśli znasz dokładne położenie tej pory w swojej ciąg można użyć

substr('LT50420331984221PAC00_B7.tif', 10, 16) 
+1

Jeśli część daty znajduje się w tej samej pozycji, to jest to, czego bym użył. – Jesse

3

Na przykład:

gsub('(.*)([0-9]+{7})[A-Z].*','\\2','LT50420331984221PAC00_B7.tif') 
"1984221" 

Tu zakładamy, że data jest 7 cyfr przed literą.

+0

, jeśli zakładasz długość łańcucha, jaka jest korzyść z używania 'sub' przez' substr'? –

+1

@RicardoSaporta Nie zakładam długości napisu. Długość to długość daty w określonym formacie. Zakładam pozycję tej daty. – agstudy

+0

tak, mówimy to samo, po prostu używając różnych terminów. Zastanawiam się tylko, co otrzymujesz z używania 'sub' w tym konkretnym kontekście, którego nie możesz używać z' substr'? –

Powiązane problemy