首页 > 解决方案 > 从R中的字符串中删除选定的空格

问题描述

通过尝试摆脱从 PDF 获得的字符串中的一些空格,我真的陷入了困境。

字符串如下所示:

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

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

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

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

我尝试的是:

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

揭示

[1] "ZUSAMMEN875631931456531506193117802252059"

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

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

标签: stringrstudiostr-replacegsubstringr

解决方案


您可以使用

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

在线查看R 演示

要删除任何空格,请使用以下两者之一:

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

推荐阅读