2012-05-08 27 views
8

Czy ktoś ma sztuczkę do usuwania spacji końcowych na zmiennych za pomocą gsub?Usuwanie spacji końcowych z gsub w R

Poniżej znajduje się próbka moich danych. Jak widzisz, mam zarówno spacje końcowe, jak i spacje osadzone w zmiennej.

county <- c("mississippi ","mississippi canyon","missoula ", 
      "mitchell ","mobile ", "mobile bay") 

mogę użyć następującego logiki, aby usunąć wszystkie spacje, ale co ja naprawdę chcę to tylko przenieść spacji na końcu.

county2 <- gsub(" ","",county) 

Każda pomoc będzie mile widziana.

+0

odpowiedział również tutaj: http://stackoverflow.com/a/2261149/1172302 –

Odpowiedz

10

Można użyć wyrażenia regularnego:

county <- c("mississippi ","mississippi canyon","missoula ", 
     "mitchell ","mobile ", "mobile bay") 
county2 <- gsub(" $","", county, perl=T) 

$ stojak na końcu sekwencji tekstu, dlatego obowiązuje tylko końcowe są dopasowane. perl=T włącza wyrażenia regularne dla wzorca dopasowania. Aby uzyskać więcej informacji na temat wyrażenia regularnego, zobacz ?regex.

+0

Dziękuję bardzo – MikeTP

+4

@MikeTP: zauważ, że to będzie działać tylko wtedy, gdy istnieje tylko jedno miejsce spływu. Jeśli twój wektor 'county' zawiera element z wieloma końcowymi spacjami, tylko ostatni zostanie usunięty. –

30

Przeczytaj ?regex, aby dowiedzieć się, jak działają wyrażenia regularne.

gsub("[[:space:]]*$","",county) 

[:space:] jest wstępnie zdefiniowana klasa znaków pasujący spacje w danym regionie. * mówi, aby powtórzyć mecz zero lub więcej razy i $ mówi, aby dopasować koniec napisu.

+0

dziękuję bardzo – MikeTP

+2

@MikeTP Hadly ładnie podsumował szereg wspólnych funkcji ciągów w swoim pakiecie 'stringr'. Ten, który to robi, to 'str_trim()'. – Justin

8

Jeśli nie potrzebujesz użyć polecenia gsub - funkcja str_trim jest do tego przydatna.

library(stringr) 
    county <- c("mississippi ","mississippi canyon","missoula ", 
     "mitchell ","mobile ", "mobile bay") 
    str_trim(county) 
+1

Zauważ, że 'str_trim' jest ładnym opakowaniem dla gsub. Nie wiem, co masz na myśli, mówiąc: "Jeśli nie musisz używać gsub". – Dason

+0

Spowoduje to usunięcie dowolnej liczby spacji na końcu ciągu, a nie tylko jednego. –

0
Above solution can not be generalized. Here is an example: 


    a<-" keep business moving" 
    str_trim(a) #Does remove trailing space in a single line string 

However str_trim() from 'stringr' package works only for a vector of words and a single line but does not work for multiple lines based on my testing as consistent with source code reference. 

    gsub("[[:space:]]*$","",a) #Does not remove trailing space in my example 
    gsub(" $","", a, perl=T) #Does not remove trailing space in my example 

Below code works for both term vectors and or multi-line character vectors which was provided by the reference[1] below. 

    gsub("^ *|(?<=) | *$", "", a, perl=T) 


#Reference:: 
+0

Próbuję to zrozumieć, ale dla mnie istnieje tylko wiodąca przestrzeń, a nie końcowa przestrzeń? – TobiO