r - 使用R中的stringr和regex从文本中提取数字

标签 r regex stringr

我有一个问题,我试图从包含文本和数字的字符串中提取数字,然后创建两个新列,显示数字的最小值和最大值。

例如,我有一列和一串这样的数据:

Text
Section 12345.01 to section 12345.02

我想从 Text 列中的数据创建两个新列,如下所示:
Min        Max   
12345.01   12345.02

我将 dplyr 和 stringr 与正则表达式一起使用,但正则表达式仅提取模式的第一次出现(第一个数字)。
df%>%dplyr::mutate(SectionNum = stringr::str_extract(Text, "\\d+.\\d+"))

如果我尝试使用 stringr::str_extract_all功能。它似乎提取了模式的两个出现,但它在小标题中创建了一个列表,我发现这是一个真正的麻烦。所以我坚持第一步,只是想把数字放到他们自己的列中。

谁能推荐最有效的方法来做到这一点?理想情况下,我想从字符串中提取数字,将它们转换为数字 as.numeric然后运行 ​​min()max()职能。

最佳答案

extract来自 tidyr . extract将每个正则表达式捕获组变成它自己的列。 convert = TRUE方便,因为它将结果列强制为最佳格式。 remove = FALSE如果我们想保留原始列,可以使用。最后 mutate是可选的,以确保提取的第一个数字确实是最小值:

library(tidyr)
library(purrr)

df %>%
  extract(Text, c("Min", "Max"), "([\\d.]+)[^\\d.]+([\\d.]+)", convert = TRUE) %>%
  mutate(Min = pmap_dbl(., min),
         Max = pmap_dbl(., max))

输出:
       Min      Max
1 12345.02 12345.03

数据:
df <- structure(list(Text = structure(1L, .Label = "Section 12345.03 to section 12345.02", class = "factor")), class = "data.frame", row.names = c(NA, 
-1L), .Names = "Text")

关于r - 使用R中的stringr和regex从文本中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52486211/

相关文章:

sql - 使用 dplyr 和 SQLite 进行 UTF-8 编码

javascript - 正则表达式:替换两个字符之间不包含逗号的所有字符

javascript - 检测文本区域中的全部大写用法?

Java 正则表达式 : Match any word from pattern

r - stringr:提取包含特定单词的单词

r - 匹配数据框中列的文本

r - 应用滚动功能时如何显示缺失日期

r - 按日期范围和分类变量组合数据集

正则表达式替换匹配项,但也会忽略引号内的匹配项

html - 是否可以更改 Shiny Dashboard 标题中单个字符的颜色?