gpt4 book ai didi

regex - dplyr内的正则表达式匹配

转载 作者:行者123 更新时间:2023-12-04 22:59:13 28 4
gpt4 key购买 nike

回答时this question,我写了以下代码:

df <- data.frame(Call_Num = c("HV5822.H4 C47 Circulating Collection, 3rd Floor", "QE511.4 .G53 1982 Circulating Collection, 3rd Floor", "TL515 .M63 Circulating Collection, 3rd Floor", "D753 .F4 Circulating Collection, 3rd Floor", "DB89.F7 D4 Circulating Collection, 3rd Floor"))

require(stringr)

matches = str_match(df$Call_Num, "([A-Z]+)(\\d+)\\s*\\.")
df2 <- data.frame(df, letter=matches[,2], number=matches[,3])

现在我的问题是:是否有一种简单的方法可以将最后两行合并为一行 dplyr调用,大概使用 mutate() ?或者,我对 do() 的解决方案感兴趣以及。对于 mutate()方法,因为我们要提取 2 个组,所以我将采用调用 str_match() 的解决方案两次使用不同的正则表达式,每个所需的组一个。

编辑:澄清一下,我在这里看到的主要挑战是 str_match返回一个矩阵,我想知道如何在 mutate() 中处理它或 do() .我对使用其他提取信息的方法解决原始问题不感兴趣。已经给出了很多这样的解决方案 here.

最佳答案

你可以用 extract() 做到这一点来自 tidyr包裹:

extract(df, Call_Num, into = c("letter", "number"), regex = "([A-Z]+)(\\d+)\\s*\\.", remove = FALSE)

Call_Num letter number
1 HV5822.H4 C47 Circulating Collection, 3rd Floor HV 5822
2 QE511.4 .G53 1982 Circulating Collection, 3rd Floor QE 511
3 TL515 .M63 Circulating Collection, 3rd Floor TL 515
4 D753 .F4 Circulating Collection, 3rd Floor D 753
5 DB89.F7 D4 Circulating Collection, 3rd Floor DB 89

它不是 dplyr,但如上面链接的 CRAN 页面所述,tidyr“专为数据整理(不是一般的 reshape 或聚合)而设计,并且与 dplyr 数据管道配合得很好。”

关于regex - dplyr内的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31270312/

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