2016-09-27 48 views
1

部分:R:mapply(GSUB ...)给出了不同的结果GSUB(......)我的数据

data <- c('googel', 'googele', 'googl', 'google .de', 'google kalender', 
     'google maps', 'google.ch', 'www.google.ch', 'factbook', 'facebock', 
     'facebok', 'facebook', 'facebook.ch', 'facebook.com', 'facebook.de', 'facebooke') 

我与 '谷歌' 和所有的Facebook取代所有类似谷歌的词与'Facebook'一样的词。我可以用下面的代码做到这一点:

### Google coding 
> google <- gsub(pattern = '.*go.*g.*l.*', replacement = 'Google', data) 

### Facebook coding 
> fbGoogle <- gsub(pattern = '.*fa.*bo.*k.*', replacement = 'Facebook', google) 
> plyr::count(fbGoogle) 
     x freq 
1 Facebook 8 
2 Google 8 

我想做到这一点使用mapply,对模式的载体,一个用于替换。虽然我用的是相同的(相当原始的,我知道)正则表达式,我得到比以前不同的结果:

> ### Google and Facebook togeter 
> patterns <- c('.*go.*g.*l.*', '.*fa.*bo.*k.*') 
> replacements <- c('Google', 'Facebook') 
> fbGoogleFail <- mapply(gsub, patterns, replacements, data) 
> plyr::count(fbGoogleFail) 
       x freq 
1  facebok 1 
2  Facebook 4 
3 facebook.ch 1 
4 facebook.de 1 
5  factbook 1 
6  googele 1 
7   Google 4 
8  google .de 1 
9 google maps 1 
10 www.google.ch 1 

想法,我失败吗?任何帮助深表感谢。

+0

你为什么要使用'mapply'? – Sotos

+0

@Sotos:我有更多的模式可以匹配和替换。使用两个向量比重复'gsub'几十次更容易。是否有更好的替代'mapply'? (感谢编辑我的问题) –

+0

@ user2100721:我不会完全赞同你的答案。我需要在哪里放置'|'? –

回答

0

试试这个

​​
+0

我试了第一个两行,现在我的R Studio不再工作。看起来像是计算,即没有命令提示符>。但是在控制台的右上角也没有停止标志。 并且这些提示不会终止进程:http://stackoverflow.com/questions/8370548/how-can-i-interrupt-a-running-code-in-r-with-a-keyboard-command 只好'ctrl-alt-del'吧。 –

+0

谢谢,它适用于示例数据。我将在接下来的两个小时内对“真实”数据进行尝试,并希望它能在那里工作(长度为27的repl和patt向量,应用于长度为2000的数据)。 –