【问题标题】:How to remove spaces in a character string at specific positions in R ?如何删除 R 中特定位置的字符串中的空格?
【发布时间】:2014-08-08 05:30:10
【问题描述】:

我有一长串名字,我必须计算每个名字出现的次数。然而,名称与空格混合。

这是一个简单的例子

x <- c(" John D","John D ","John D")
table(x)
x
 John D  John D John D  
      1       1       1 

您可以看到由于空格,它被识别为三个不同的名称。我要做的是在不丢失 John 和 D 之间的空间的情况下,我必须删除剩余的空间。 请帮忙。谢谢。

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

    您可以使用gsub 删除前导/尾随空白字符。

    x <- c("   John D", "John D   ", " John D ")
    y <- gsub('^\\s+|\\s+$', '', x)
    table(y)
    # y
    # John D 
    #      3 
    

    解释\s 仅匹配开头^ 和结尾@ 的空格(\n\r\t\f" ")分别为 987654331@ 的字符串。 + 量词表示匹配(1 次或更多次)。

    您也可以使用stringr 库包。

    library(stringr)
    x <- c("   John D", "John D   ", " John D ")
    y <- str_trim(x, side='both')
    table(y)
    # y
    # John D 
    #      3 
    

    【讨论】:

    • 你能解释一下它是如何工作的吗?这样我就可以学习而不是仅仅复制您的代码
    • 我认为sub 的执行方式也相同,因为我们只匹配两端的第一组空格。
    【解决方案2】:

    试试:

     library(stringr)
     x1 <- str_trim(x)
     table(x1)
     #x1
     # John D 
     #     3 
    

    或者

      gsub("^ +| +$", "",x)
     #[1] "John D" "John D" "John D"
    
    • ^ +| +$ - 开头或结尾有 0 个或多个空格
    • 用“”替换它

    如果你有这样的向量:

    x <- c("John     D", "   \n John D", "John  D \r")
    library(qdap)
    strip(x,lower.case=F)
    #[1] "John D" "John D" "John D"
    

    如果名称之间没有额外的空格 str_trim 仍然有效

     x <- c("  \nJohn D","John D\r ","John D")
     str_trim(x)
     #[1] "John D" "John D" "John D"
    

    【讨论】:

    • 谢谢@akrun 我接受了另一个答案,因为我也从中学到了一些东西。
    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多