gpt4 book ai didi

r - 是否有用于模糊字符串检测的 R 包(或现有函数)?

转载 作者:行者123 更新时间:2023-12-05 09:27:16 26 4
gpt4 key购买 nike

我正在寻找类似于 stringr 包中的 str_detect() 的东西,但它能够检测不完美或“模糊”的匹配。最好,我希望能够指定不完美的程度(1 个不同的字符、2 个不同的字符等)。

我正在做的匹配将采用类似于下面代码的形式(但这只是我编造的一个简化示例)。在这个例子中,只有“RUTH CHRIS”被匹配——我想要一些能够匹配稍微错误的字符串的东西。

library(tidyverse)

my_restaurants <- tibble(restaurant = c("MCDOlNALD'S ON FRANKLIN ST",
"NEW JERSEY WENDYS",
"8/25/19 RUTH CHRIS",
"MELTINGPO 9823i3")
)

cheap <- c("MCDONALD'S", "WENDY'S") %>% str_c(collapse="|")
expensive <- c("RUTH CHRIS", "MELTING POT") %>% str_c(collapse="|")

my_restaurants %>%
mutate(category = case_when(
str_detect(restaurant, cheap) ~ "CHEAP",
str_detect(restaurant, expensive) ~ "EXPENSIVE"
))

再一次,这给出了这个输出:

##  A tibble: 4 × 2
# restaurant category
# <chr> <chr>
# 1 MCDOlNALD'S ON FRANKLIN ST NA
# 2 NEW JERSEY WENDYS NA
# 3 8/25/19 RUTH CHRIS EXPENSIVE
# 4 MELTINGPOT 9823i3 NA

但是我想要:

## A tibble: 4 × 2
# restaurant category
# <chr> <chr>
# 1 MCDOlNALD'S ON FRANKLIN ST CHEAP
# 2 NEW JERSEY WENDYS CHEAP
# 3 8/25/19 RUTH CHRIS EXPENSIVE
# 4 MELTINGPOT 9823i3 EXPENSIVE

我不反对使用正则表达式,但我的实际数据比给定的示例复杂得多,所以我更喜欢一些更简洁的东西,允许一般的,而不是特定的模糊类型。

最佳答案

在 Base R 中,你可以这样做:

cheap <- c("MCDONALD'S", "WENDY'S") 
expensive <- c("RUTH CHRIS", "MELTING POT")

pat <- stack(list(cheap = cheap, expensive = expensive))

transform(my_restaurants, category=pat[sapply(pat$values,agrep,restaurant),2])

restaurant category
1 MCDOlNALD'S ON FRANKLIN ST cheap
2 NEW JERSEY WENDYS cheap
3 8/25/19 RUTH CHRIS expensive
4 MELTINGPO 9823i3 expensive

关于r - 是否有用于模糊字符串检测的 R 包(或现有函数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72723952/

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