gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:34:18 26 4
gpt4 key购买 nike

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

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com