【问题标题】:R - Extracting numeric data from character vector based on recurring string that follows numberR - 根据数字后面的重复字符串从字符向量中提取数字数据
【发布时间】:2015-12-29 11:33:37
【问题描述】:

我想从R中的字符向量中提取数字信息。向量中的每一行都有相同的结构,如下所示:

  [1] "Capturing tweets..."                                                                    
  [2] "Connection to Twitter stream was closed after 1 seconds with up to 1 tweets downloaded."
  [3] "Capturing tweets..."                                                                    
  [4] "Connection to Twitter stream was closed after 1 seconds with up to 1 tweets downloaded."
  [5] "Capturing tweets..."                                                                    
  [6] "Connection to Twitter stream was closed after 1 seconds with up to 1 tweets downloaded."
  [7] "Capturing tweets..."                                                                    
  [8] "Connection to Twitter stream was closed after 1 seconds with up to 1 tweets downloaded."
  [9] "Capturing tweets..." 

如您所见,此向量中有两种重复出现的数字信息。一个概述打开连接的持续时间,即数字后跟“秒”,另一个指示下载的推文数量。我只需要推文的数量,所以我想生成一个新的数字向量,它只包含每行后面跟着“推文”的数字。

【问题讨论】:

  • 你已经尝试过什么了吗?
  • 嗨@Heroka,我已经尝试了'gsub'的几种变体,例如this: tweetnumbers <- as.numeric(gsub("[^\\d]+", "", output, perl=TRUE)) 但是,这只是为每一行留下了一个“11”。
  • @nikUoM,我建议编辑您的问题以包括您迄今为止所做的最有希望的尝试(上述评论很好,但添加到问题中时效果最好),以便人们有更多的东西具体来帮助你。

标签: regex r twitter vector


【解决方案1】:

你的正则表达式必须是,

as.numeric(sub(".*?(\\d+) tweets.*","\\1",x))

tweets 之后的.* 是非常需要的,这样它就可以删除推文旁边的所有字符。

x <- c("Capturing tweets...", "Connection to Twitter stream was closed after 1 seconds with up to 1 tweets downloaded.")
as.numeric(sub(".*?(\\d+) tweets.*","\\1",grep("\\d+ tweets", x, value=TRUE)))
# [1] 1

为什么我使用.*? 而不是.*

因为.* 是贪婪的,它匹配所有字符直到最后一个。然后它回溯以找到匹配项。所以它回溯(反向遍历)到tweets 之前存在的数字,并且由于\\d+(至少一个数字。所以它找到匹配项),它停止捕获第一个数字旁边存在的所有数字。现在它不会回到第二个字符,因为条件满足\\d+,匹配一个或多个数字字符。

【讨论】:

  • 奇怪,我刚刚意识到这与您评论中的代码相同 - 我所做的只是使用一个新的向量名称来分配它。
  • @nikUoM 这是因为它试图将不包含 num 推文的字符串转换为数字。所以首先 grep 包含 numtweets 的字符串,然后应用 sub.
猜你喜欢
  • 2017-02-17
  • 2013-01-10
  • 2019-05-21
  • 1970-01-01
  • 2022-01-17
  • 2018-12-14
  • 2021-07-21
相关资源
最近更新 更多