使用R中的gsub函数去除尾部空格

8

有没有什么技巧可以使用 gsub 去除变量中的尾随空格?

下面是我的数据样本。您可以看到,变量中既有尾随空格,也有嵌入式空格。

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

我可以使用以下逻辑来删除所有空格,但我真正想要的是仅将末尾的空格移动。

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

非常感谢您的协助。


也可以在这里找到答案:https://dev59.com/KnE95IYBdhLWcg3wkekf#2261149 - Nikos Alexandris
4个回答

32

阅读?regex,了解正则表达式的工作原理。

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

[:space:]是一个预定义的字符类,它匹配您的语言环境中的空格字符。*表示重复零次或多次匹配,$表示匹配字符串结尾。


3
@MikeTP 在他的包stringr中概括了一些常见的字符串函数。其中一个函数是str_trim(),可以实现这个功能。 - Justin

13

您可以使用正则表达式:

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

$代表文本序列的结尾,因此只匹配尾随空格。 perl = T 启用匹配模式的正则表达式。有关正则表达式的更多信息,请参见?regex


5
请注意,只有在只有一个尾随空格的情况下才能起作用。如果你的 county 向量中有一个元素有多个尾随空格,那么只会删除最后一个空格。 - Joshua Ulrich

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
这将删除字符串末尾的任意数量的空格,而不仅仅是一个。 - tumultous_rooster

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::

我正在尝试理解这个问题,但是对我来说只有一个前导空格,没有后置空格? - TobiO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接