当前位置: 首页 > 知识库问答 >
问题:

用R删除某个单词前的字符串

卫弘懿
2023-03-14

我有一个需要清理的字符向量。具体来说,我想删除“投票”之前的数字请注意,数字有一个逗号分隔千,因此更容易将其视为字符串。

我知道gsub("*.投票",",文本)将删除所有内容,但如何删除数字?另外,我如何将重复的空间折叠成一个空间?

谢谢你的帮助!

示例数据:

text <- "STATE QUESTION NO. 1                       Amendment to Title 15 of the Nevada Revised Statutes Shall Chapter 202 of the Nevada Revised Statutes be amended to prohibit, except in certain circumstances, a person from selling or transferring a firearm to another person unless a federally-licensed dealer first conducts a federal background check on the potential buyer or transferee?                    558,586 Votes"

共有2个答案

芮化
2023-03-14

最简单的方法是使用stringr

> library(stringr)
> regexp <- "-?[[:digit:]]+\\.*,*[[:digit:]]*\\.*,*[[:digit:]]* Votes+"
> str_extract(text,regexp)
[1] "558,586 Votes"

执行相同的操作但只提取数字,请将其包装在gsub

> gsub('\\s+[[:alpha:]]+', '', str_extract(text,regexp))
[1] "558,586"

这里有一个版本,它将去掉“投票”这个词之前的所有数字,即使它们有逗号或句号:

> gsub('\\s+[[:alpha:]]+', '', unlist(regmatches (text,gregexpr("-?[[:digit:]]+\\.*,*[[:digit:]]*\\.*,*[[:digit:]]* Votes+",text) )) )
[1] "558,586"

如果您也想要标签,那么只需扔掉gsub部分:

> unlist(regmatches (text,gregexpr("-?[[:digit:]]+\\.*,*[[:digit:]]*\\.*,*[[:digit:]]* Votes+",text) )) 
[1] "558,586 Votes"

如果你想找出所有的数字:

> unlist(regmatches (text,gregexpr("-?[[:digit:]]+\\.*,*[[:digit:]]*\\.*,*[[:digit:]]*",text) ))
[1] "1"       "15"      "202"     "558,586"
梁丘书
2023-03-14

你可以用

text <- "STATE QUESTION NO. 1                       Amendment to Title 15 of the Nevada Revised Statutes Shall Chapter 202 of the Nevada Revised Statutes be amended to prohibit, except in certain circumstances, a person from selling or transferring a firearm to another person unless a federally-licensed dealer first conducts a federal background check on the potential buyer or transferee?                    558,586 Votes"
trimws(gsub("(\\s){2,}|\\d[0-9,]*\\s*(Votes)", "\\1\\2", text))
# => [1] "STATE QUESTION NO. 1 Amendment to Title 15 of the Nevada Revised Statutes Shall Chapter 202 of the Nevada Revised Statutes be amended to prohibit, except in certain circumstances, a person from selling or transferring a firearm to another person unless a federally-licensed dealer first conducts a federal background check on the potential buyer or transferee? Votes"

请参阅在线R演示和在线正则表达式演示。

细节

  • (\\s){2,}-在捕获将使用替换模式中的\1占位符重新插入的最后一个匹配项时,匹配2个或多个空白字符
  • |-或
  • \\d-一个数字
  • [0-9,]*-0或更多数字或逗号
  • \\s*-0个空格字符
  • (投票)-第2组(将使用\2占位符在输出中恢复):一个投票子字符串

请注意,trimws将删除任何前导/尾随空格。

 类似资料:
  • 问题内容: 我只是想知道如何在PHP中某个子字符串之后删除所有内容 例如: 我想要它,以便它删除包括子字符串“ By”在内的所有文本。 谢谢 问题答案: 用简单的英语来说:给我字符串的一部分,从开始到结束,直到您第一次遇到分支的位置。

  • 问题内容: 我正在使用。 我想删除句子中所有出现的特定单词,但是我不想删除包含z或AZ之间其他字符的任何其他单词。 例如 ,以下是我要删除的句子: 预期产量 : 请注意,如果该单词包含+和之前或之后的任何其他单词,我也想删除它。 到目前为止,这是我尝试过的: 我正在输出: 在上面的输出中,我期望不被替换,应该完全替换。 我应该如何实现呢?任何建议将不胜感激。 编辑: 为清楚起见,这是我正在寻找的另

  • 问题内容: 从Java中的字符串中删除第一个单词的最佳方法是什么? 如果我有 我想从中删除第一个单词,实际上形成了两个字符串- 问题答案: 简单。 输出: 编辑: 在下面的第2行中,值存储在数组中。像普通数组一样访问它们。

  • 之前: Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eusmod tempor incidunt ut labore et dolore magna aliqua. 之后: elit,sed do eusmod tempor incidunt ut labore et dolore magna aliqua. 唯一的

  • 问题内容: 我有一个停用词列表。我有一个搜索字符串。我想从字符串中删除单词。 举个例子: 现在,代码应删除“ What”和“ is”。但是在我的情况下,它会去除“ a”和“ at”。我在下面给出了我的代码。我可能做错了什么? 如果输入查询为“什么是Hello”,则输出为: 为什么会这样? 问题答案: 这是一种方法: 我注意到,如果列表中包含小写字母,您还希望删除该单词,因此我在条件检查中添加了对的

  • 我正在通过JSON提取twitter用户的个人资料图像。为此,我的代码是: 返回配置文件图像的url。url的格式可以是或或或等。 现在我想从我收到的每个网址中删除“_normal”部分。如何在php中实现这一点?我厌倦了尝试它。请帮助。