【问题标题】:How to replace whitespace of varying length with one space?如何用一个空格替换不同长度的空格?
【发布时间】:2021-11-13 17:41:26
【问题描述】:

如何在 R 中用单个空格替换不同长度的空格?

R 有很多替换字符的方法,例如gsub、tidyr 或 stringr 包。但是,我无法弄清楚如何用单个 \n 空格最好地替换空格(长度不同)。

这是 R 中的一个 data.frame。

df = data.frame(column1= c("A B", "C  D", "E   F", "G    H", "I     J", "K      L", "M       N"))

注意空格的数量是不同的:

print(df)
#     column1
# 1       A B
# 2      C  D
# 3     E   F
# 4    G    H
# 5   I     J
# 6  K      L
# 7 M       N

我的幼稚方法是使用gsub()

df$column1 <- gsub("[[:space:]]", " ", df$column1) 

但是,这不会改变不同长度的空格以替换为单个空格。

【问题讨论】:

标签: r string


【解决方案1】:

你也可以使用str_squish:

library(tidyverse)

df %>%
   mutate(column1 = str_squish(column1))

  column1
1     A B
2     C D
3     E F
4     G H
5     I J
6     K L
7     M N

【讨论】:

    【解决方案2】:

    我们可能需要使用+,即一个或多个,而不仅仅是[[:space:]]

    df$column1 <- gsub("[[:space:]]+", "\n", df$column1) 
    df$column1
    [1] "A\nB" "C\nD" "E\nF" "G\nH" "I\nJ" "K\nL" "M\nN"
    

    如果是单个空格,将\n改为" "

    df$column1 <- gsub("[[:space:]]+", " ", df$column1) 
    df$column1
    [1] "A B" "C D" "E F" "G H" "I J" "K L" "M N"
    

    带有[[:space:]] 的OP 代码导致将空格替换为空格或\n

    > gsub("[[:space:]]", "\n", df$column1)
    [1] "A\nB"             "C\n\nD"           "E\n\n\nF"         "G\n\n\n\nH"       "I\n\n\n\n\nJ"     "K\n\n\n\n\n\nL"   "M\n\n\n\n\n\n\nN"
    

    【讨论】:

    • 行得通!谢谢!我忘了"[:space:]]+"
    • "[ ]+" 的击键次数更少
    • @IRTFM 是的,我是这么认为的,但根据我过去的经验,当 OP 用[[: 询问某些内容时,如果我们更改它,他们可能不喜欢它
    猜你喜欢
    • 2018-02-09
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多