2016-10-20 21 views
6

Nachdem ich meine Zeilen zusammenfassen und mit einem Semikolon trennen, möchte ich die Semikola am Anfang und Ende meiner Zeichenfolge löschen. Mehrere Semikolons stehen für Leerzeichen in einer Zelle. Zum Beispiel kann eine Beobachtung wie folgt aussehen nach dem Zusammenbruch:Entfernen Sie alle Trennzeichen am Anfang und Ende der Zeichenfolge

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

ich die Zelle möchte wie folgt aussehen:

TX;PA;CA 

Hier ist mein Zusammenbruch Code:

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

Wenn ich versuche, für Semikolon gsub zu verwenden, werden alle entfernt. Wenn ich das Endezeichen entferne, entfernt es nur eines der Semikolons. Irgendwelche Ideen, wie man alles am Anfang und am Ende entfernen kann, aber die zwischen den Beobachtungen belassen? Vielen Dank.

Antwort

10

Verwendung der reguläre Ausdruck ^;+|;+$

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

Die ^ zeigt den Beginn des Strings, die + mehrere Übereinstimmungen gibt, und $ zeigt das Ende des Strings. Die | gibt "OR" an. Also, kombiniert, sucht es nach einer beliebigen Anzahl von ; am Anfang eines Strings oder einer beliebigen Anzahl von ; am Ende des Strings, und ersetzen Sie diese durch ein Leerzeichen.

+0

Eigentlich 'gsub ("^; + |; + $", "", x)' ist genug, Sie müssen nicht erfassen, was Sie entfernen. –

+0

Toller Fang. Ich habe die Antwort bearbeitet, um Ihren Vorschlag zu reflektieren. – Benjamin

+0

Brilliant! Liebe es. Vielen Dank! Sehr hilfreich, vor allem, wenn Sie diese Artikel in HTML veröffentlichen müssen, ist es eine Nervensäge, mehrere Leerzeichen zu haben! :) – DCRubyHound

3

Das Paket ermöglicht es Ihnen, Muster festzulegen, die Sie beibehalten und alles andere abschneiden möchten. Wenn Sie nur Buchstaben dort haben (obwohl Sie ein anderes Muster spezifizieren können), können Sie einfach tun

stringi::stri_trim_both(";TX;PA;CA;;;;;;;", "\\p{L}") 
## [1] "TX;PA;CA" 
Verwandte Themen