2016-10-20 22 views
6

Po tym, jak zwinąć wiersze i oddzielić je średnikiem, chciałbym usunąć średniki z przodu i z tyłu ciągu znaków. Wiele średników reprezentuje puste miejsca w komórce. Na przykład obserwacja może wyglądać następująco po upadku:usuń wszystkie ograniczniki na początku i końcu ciągu znaków

;TX;PA;CA;;;;;;; 

Chciałbym komórkę, aby wyglądać tak:

TX;PA;CA 

Oto mój kod upadek:

new_df <- group_by(old_df, unique_id) %>% summarize_each(funs(paste(., collapse = ';'))) 

Jeśli spróbuję gsub na średnik, to usuwa je wszystkie. Jeśli usuniemy znak końca, to po prostu usuwa jeden ze średników. Wszelkie pomysły, jak usunąć wszystko na początku i na końcu, ale pozostawiając je pomiędzy obserwacjami? Dzięki.

Odpowiedz

10

stosowanie wyrażenie regularne ^;+|;+$

x <- ";TX;PA;CA;;;;;;;" 
gsub("^;+|;+$", "", x) 

^ wskazuje początek napisu, + wskazuje wiele odpowiedników, a $ oznacza koniec łańcucha. | oznacza "OR". Tak więc, w połączeniu, wyszukuje on dowolną liczbę ; na początku ciągu LUB dowolnej liczby ; na końcu ciągu znaków i zastępuje je pustym odstępem.

+0

Właściwie 'gsub ("^ + | + $", "", x)' wystarczy, nie musisz przechwytywać tego, co usuwasz. –

+0

Świetny połów. Zmieniłem odpowiedź, aby odzwierciedlić Twoją sugestię. – Benjamin

+0

Genialny! Kocham to. Dzięki wielkie! Niezwykle pomocna, zwłaszcza gdy musisz opublikować te elementy w HTML, posiadanie wielu spacji to ból w dupie! :) – DCRubyHound

3

Pakiet stringi pozwala określić wzory, które chcesz zachować i przyciąć wszystko inne. Jeśli masz tylko litery tam (choć można określić inny wzór też), można po prostu zrobić

stringi::stri_trim_both(";TX;PA;CA;;;;;;;", "\\p{L}") 
## [1] "TX;PA;CA" 
Powiązane problemy