2012-05-08 141 views
8

有沒有人有一個技巧,用gsub刪除變量尾隨空格?用gsub刪除尾隨空格R

下面是我的數據樣本。正如你所看到的,我在變量中嵌入了空格和空格。

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

我可以使用下面的邏輯來刪除所有空格,但我真正想要的是僅在端移動的空間。

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

任何援助將不勝感激。

+0

還回答了在這裏:http://stackoverflow.com/a/2261149/1172302 –

回答

10

你可以使用一個正則表達式:

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

$展臺爲您的文字順序的末尾,因此只尾隨空格匹配。 perl=T爲匹配模式啓用正則表達式。 有關正則表達式的更多信息,請參見?regex

+0

非常感謝你 – MikeTP

+4

@MikeTP:請注意,如果只有一個尾隨空格,這隻會工作。如果你的'縣'向量具有多個尾隨空格的元素,則只有最後一個被刪除。 –

30

閱讀?regex瞭解正則表達式是如何工作的。

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

[:space:]是一個預先定義的字符類的空格字符在您的區域設置相匹配。 *表示重複匹配零次或多次,$表示匹配字符串的末尾。

+0

非常感謝你 – MikeTP

+2

@MikeTP在他的包'stringr'中很好地總結了一些常見的字符串函數。做這個的是'str_trim()'。 – Justin

8

如果您不需要使用gsub命令 - str_trim函數對此很有用。

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

請注意'str_trim'是gsub的一個很好的包裝。我不清楚你的意思是「如果你不需要使用gsub」。 – Dason

+0

這將刪除字符串末尾的任意數量的空格,而不僅僅是一個。 –

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

我試圖理解這一點,但對我來說,只有一個領先的空間,而不是尾隨的空間? – TobiO