簡體   English   中英

R - 查找向量的字符是否在另一個向量中

[英]R - Find if characters of a vector are in another vector

我有一個與這里的主題非常相似的疑問: Find matches of a vector of strings in another vector of strings

我有一個客戶向量,如果名稱表明它是商業客戶,我需要更改我的 data.frame 中的類型。

所以,假設:

commercial_names <- c("BAKERY","MARKET", "SCHOOL", "CINEMA")
clients <- c("JOHN XX","REESE YY","BAKERY ZZ","SAMANTHA WW")

我嘗試了之前引用的主題中的代碼,但出現錯誤:

> grepl(paste(commercial_names, collape="|"),clients)
[1] TRUE TRUE TRUE TRUE
Warning message:
In grepl(paste(commercial_names, collape = "|"), clients) :
  argument 'pattern' has length > 1 and only the first element will be used

我究竟做錯了什么? 我會感謝任何幫助。

您的代碼是正確的,但有一個錯字:

grepl(paste0(commercial_names, collapse = "|"), clients) # typo: collape
[1] FALSE FALSE  TRUE FALSE

鑒於錯字, commercial_names名稱不會折疊。

不知道如何用單線做到這一點,但循環似乎可以解決問題。

sapply(clients, function(client) {
  any(str_detect(client, commercial_names))
})
> JOHN XX    REESE YY   BAKERY ZZ SAMANTHA WW 
> FALSE       FALSE        TRUE       FALSE 

我找到了另一種方法,使用命令%like% of package data.table

> clients %like% paste(commercial_names,collapse = "|")
[1] FALSE FALSE  TRUE FALSE

你也可以這樣做:

clients.first <- gsub(" ..", "", clients)
clients.first %in% commercial_names

這將返回:

[1] FALSE FALSE  TRUE FALSE

如果您的客戶端數據更加異構,您可能需要更改gsub的正則表達式。

暫無
暫無

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

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