簡體   English   中英

找到與R匹配的最佳字符串

[英]Finding the best string match with R

從這個L Hernandez

從包含以下內容的向量:

[1] "HernandezOlaf "    "HernandezLuciano " "HernandezAdrian "

我試過這個:

'subset(ABC, str_detect(ABC, "L Hernandez") == TRUE)'

包括首都L anyplace的Hernandez這個名字是理想的輸出。

期望的輸出是HernandezLuciano

可能有幫助:

vec1 <- c("L Hernandez", "HernandezOlaf ","HernandezLuciano ", "HernandezAdrian ")
grep("L ?Hernandez|Hernandez ?L",vec1,value=T)
#[1] "L Hernandez" "HernandezLuciano "

更新

variable <- "L Hernandez"

v1 <- gsub(" ", " ?", variable) #replace space with a space and question mark 
v2 <- gsub("([[:alpha:]]+) ([[:alpha:]]+)", "\\2 ?\\1", variable) #reverse the order of words in the string and add question mark

您還可以使用strsplitvariable拆分為@rawr注釋

grep(paste(v1,v2, sep="|"), vec1,value=T)
#[1] "L Hernandez"       "HernandezLuciano "

您可以使用agrep函數進行近似字符串匹配。 如果您只是運行此函數,它匹配每個字符串...

agrep("L Hernandez", c("HernandezOlaf ",    "HernandezLuciano ", "HernandezAdrian "))
[1] 1 2 3

但如果你修改一點“L Hernandez” - >“Hernandez L”

agrep("Hernandez L", c("HernandezOlaf ",    "HernandezLuciano ", "HernandezAdrian "))
[1] 1 2 3

並改變最大距離

agrep("Hernandez L", c("HernandezOlaf ",    "HernandezLuciano ", "HernandezAdrian "),0.01)
[1] 2

你得到了正確的答案。 這只是一個想法,它可能適合你:)

如果您只想在大寫字母L之后需要全名,則可以修改以下內容:

vec1[grepl("Hernandez", vec1) & grepl("L\\.*", vec1)]
[1] "L Hernandez"       "HernandezLuciano

要么

vec1[grepl("Hernandez", vec1) & grepl("L[[:alpha:]]", vec1)]
[1] "HernandezLuciano "

該表達式在“Hernandez”上查找匹配,然后查看是否有大寫字母“L”后跟任何字符或空格。 第二個版本需要在大寫字母“L”之后寫一封信。

順便說一句,看起來你不能把這些傻瓜連在一起。

vec1[grepl("Hernandez", vec1) & grepl("L\\[[:alpha:]]", vec1)]
character(0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM