R grep()和gsub():删除匹配的字符串,还包括不匹配的字符串,并将所有观察结果存储在字符向量中

时间:2015-02-26 08:56:12

标签: regex r grep gsub

我有一个数据框transactions

Cust_no  date      debit  credit  comment
1234    12DEC2013      0     100  ATMW XYZ 8974632
1234    11DEC2013    200       0  TFR - XXXX3948389
1543    01DEC2013   3000       0  SAL - CitiBank
1543    02DEC2013      0     800  CHQ TO FAMILY
1543    10DEC2014     10       0  INSURANCE GENERALE
7777    01DEC2014   2500       0  SALARY/01-12-2013/ENJOY

我的目标是从comment列中删除所有银行术语,特殊字符和其他不需要的内容,将其存储在变量中,并将新列添加到同一个表中。因此,我将grep()gsub()

一起使用
listOfTerms <- ... #the regular expression that contains terms to be removed

NewComment <- gsub(paste(listOfTerms,collapse="|"), " ", transactions[grep(paste(listOfTerms,collapse="|") ,transactions$comment,ignore.case=TRUE),])

但问题是NewComment仅包含匹配模式的元素,并且它为我提供Large Character而不是vector

我尝试过使用sub(),但即便如此,显然我的输出相同。

那么,如果遇到不匹配的字符串并在一个向量中添加“已更正”的行和不匹配的行,我如何告诉gsub(pattern,grep(...))不要做任何事情?所需的输出如下所示。

Cust_no  date      debit  credit  comment                  NewComment
1234    12DEC2013      0     100  ATMW XYZ 8974632         XYZ
1234    11DEC2013    200       0  TFR - XXXX3948389        XXXX
1543    01DEC2013   3000       0  SAL - CitiBank           CitiBank
1543    02DEC2013      0     800  CHQ TO FAMILY            TO FAMILY
1543    10DEC2014     10       0  INSURANCE GENERALE       INSURANCE GENERALE
7777    01DEC2014   2500       0  SALARY/01-12-2013/ENJOY  ENJOY

1 个答案:

答案 0 :(得分:0)

您可以在没有gsub的情况下使用grepgsub将替换与模式匹配的每个字符串的部分,如果没有匹配,您将获得原始字符串。

尝试:

transactions$NewComment<-gsub(paste(listOfTerms,collapse="|"),"",transactions$comment)