从 R 中的字符串中删除选定的空格

Remove selected whitespaces from string in R

我真的被困在某个时刻,试图摆脱我从 PDF 获得的字符串中的一些空格。

字符串如下所示:

[1] "                                      ZUSAMMEN          8 756    3 193       1 456        531         506       1 931    1 780        225      2 059"

如您所见,我遇到的问题是所有 "thousands" 都用空格分隔,不是 8756,而是 8 756。

我的问题是我只想自动删除千位之间的空格。

我知道如何手动管理它,但我需要一种自动化的方式,因为我有几千个观察结果需要调整。

我试过的是:

c <- gsub("\s", "", t) 

揭示

[1] "ZUSAMMEN875631931456531506193117802252059"

但是,我不知道如何只去掉千位数字之间的那些空格。

我希望一切都清楚! 提前致谢, 尼克拉斯

您可以使用

x <- "                                      ZUSAMMEN          8 756    3 193       1 456        531         506       1 931    1 780        225      2 059"
gsub("(\d) (\d)", "\1\2", x)

参见R demo online

要去除任何白色space,请使用以下两种方法之一:

gsub("(\d)[[:space:]](\d)", "\1\2", x)
gsub("(\d)\s(\d)", "\1\2", x)
gsub("(*UCP)(\d)\s(\d)", "\1\2", x, perl=TRUE)
gsub("(*UCP)(?<=\d)\s(?=\d)", "", x, perl=TRUE)

备注

  • (\d) (\d) 匹配并捕获一个数字到捕获组 1(第一个 (\d)),然后匹配单个 space,然后捕获另一个数字到组 2。如果替换模式中未使用相应的反向引用,则捕获和使用的数字将被删除,因此 "\1\2" 替换字符串包含它们
  • [[:space:]]是一个POSIX字符class匹配任何白色space,类似于\s
  • 如果您使用 Unicode 文本,PCRE 正则表达式(通过 perl=TRUE 启用)可以与 \s(*UCP) 动词一起使用(它将匹配 soft/hard spaces等)
  • 如果您使用 (?<=\d) 后向和 (?=\d) 前向而不是捕获组,则文本不会被消耗(不会添加到匹配值)并且不会因此被删除,因此不需要反向引用在替换模式中。