首页 > 解决方案 > 列内匹配模式

问题描述

我想匹配某些单词和数字,并从数据框中子集这些行。

match_words<-data.frame("words"=c("ING","HDFC","HSBC","ROYAL"))

df <- data.frame(bank_issue = c("ING,HDFC", "ROYAL,SINGB","GR01565B,HSBC","01565,BOC","BOA,JPG001","G001"))

当我尝试使用 匹配第一个单词grep时,我得到 2 行 match& 包含该单词,但我只需要匹配整个单词的那些行。我需要从df.

我正在使用 grep 函数。这是我现在得到的:

grep("ING",df$bank_issue)
# [1] 1 2

而且我还需要为每一行做。

期望的输出:

1 ING    ING,HDFC
2 01565  01565,BOC
3 G001   G001

有什么建议么?

标签: r

解决方案


一种选择是使用单词边界元字符。

grep("\\bING\\b",df$bank_issue)
#[1] 1

如果您需要以编程方式创建这些搜索模式,您可以使用paste0.

terms <- paste0("\\b",unlist(match_words),"\\b")
sapply(terms,function(x){grep(x,df$bank_issue)})
#  \\bING\\b  \\bHDFC\\b  \\bHSBC\\b \\bROYAL\\b 
#          1           1           3           2 

推荐阅读