2017-07-28 44 views
1

我正在清理书目数据库的过程中,第一次与R一起工作。其中一列,我的变量是一列,其中包含所有引用问题已经引用,并且看起来像这样:R:带有通配符和几个条件的Gsub

ANDREOSSO-O'CALLAGHAN B,2008,PALGRAVE STUD EUR UN,P61。 ALECU DE FLERS N,2005,INT RELATIONS EUROPE,P317。 DUCHENE FRANCOIS,1973,NATION WRIT LARGE FO。 KOH T,2007,海峡时报0808. LENZ T,2009,GEOPOLITICS GEOECONO。 LUCARELLI S,2010,ROUTL GARN SER EUR欧元W,V7,P1。 MANNERS I,2002,J COMMON MARK STUD,V40,P235,DOI 10.1111/1468-5965.00353。 NYE J.,2004,SOFT POWER MEANS SUC。 ORBIE J,2010,NORMATIVE POWER EURO。 PORTELA C,2007,200710 RSCAS。 ROSECRANCE R.,1998,PARADOXES EUROPEAN F. SMITH K.E.,2003,EUROPEAN FOREIGN POL。 SONG XN,2010,REV INT STUD,V36,P755,DOI 10.1017/S0260210510000835。 TANAKA T,2008,PALGRAVE STUD EUR UN,P170。 WARLEIGH-LACK A.,2010,COMP REGIONAL INTEGR,P43。

我碰到的问题是,基本上相同的参考文件出现在许多不同的伪装。在上述情况下,看起来像这样

  • NYE J.,2004,SOFT POWER MEANS SUC。

在其他情况下,它看起来像这样:

  • NYE J.,2004,软实力:中的成功在世界政治,纽约:公共事务

有该参考文献至少有30个不同的独特版本。我可以通过作者的名字在我的数据库中找到它们--NYE J.,2004年的出版年,并提到“成功的手段”。因此,我的想法是使用gsub函数,该函数将在该列中的分隔符内(这是一个点和两个空格)搜索这些参数,并用

代替整个表达式
  • NYE J.,2004,SOFT POWER :中的成功在世界政治,纽约:公共事务

到现在,我能够做简单的GSUB的,所以我设法取代奈先生奈J.的所有变化,但我通过手动搜索所有变体,现在不再可行了。我想基本上做到这一点:

help2 <- within(help2, { values <- gsub (x= CR, pattern = "NYE J., 2004,*means to suc*. ", replacement = "NYE J., 2004, SOFT POWER: THE MEANS TO SUCCESS IN WORLD POLITICS, NEW YORK: PUBLICAFFAIRS")}) 

我知道通配符R中不同的工作,但我不能找出我需要改变。任何人的想法?曼特谢谢! 最好的问候, 施特菲

+0

这些3份可以有不同的订单? –

+0

尝试https://ideone.com/RD8OPu –

+0

任何反馈?... –

回答

1

你的代码可以是以下几点:

pat <- "(?i)(^|\\. +)NYE J\\.(?:(?!\\. {2}).)*?\\b2004\\b(?:(?!\\. {2}).)*?means suc(?:(?!\\. {2}).)*" 
repl <- "\\1NYE J., 2004, SOFT POWER: THE MEANS TO SUCCESS IN WORLD POLITICS, NEW YORK: PUBLICAFFAIRS" 
explain$CR <- gsub(pat, repl, explain$CR, perl=TRUE) 

R demo

regex demo

图案的详细资料

  • (?i) - 不区分大小写的改性剂使图案不区分大小写
  • (?:^|\. +) - 串(^)或点的开始,随后有2个或多个空格
  • NYE J\. - 字面NYE J.子(点必须转义以匹配文字点)
  • (?:(?!\. {2}).)*? - 比换行符字符以外的任何字符(.),零个或多个,尽可能少,不启动一个.和2个或更多的空间序列
  • \b2004\b - 2004作为一个完整的单词(如\b字界限)
  • (?:(?!\. {2}).)*? - 任何字符不是换行字符等(.),零个或多个,尽可能少,不启动.和2个或更多的空间序列
  • means suc - 字面means suc
  • (?:(?!\. {2}).)* - - 比换行符字符(.),零个或多个其它任何字符,如许多越好,不启动一个.和2个或更多的空间序列。

在替换模式的\\1被反向引用的值在组拍摄1.