【发布时间】:2016-09-27 14:12:10
【问题描述】:
我的部分数据:
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')
我必须将所有类似于 google 的词替换为“Google”,并将所有类似于 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
我在这里失败的想法?非常感谢任何帮助。
【问题讨论】:
-
为什么要使用
mapply? -
@Sotos:我有更多的模式要匹配和替换。使用两个向量比重复
gsub几十次更容易。mapply有更好的选择吗? (感谢您编辑我的问题) -
@user2100721:我没有完全理解你的答案。我必须在哪里放置
|? -
mapply 依次获取每个数据元素并交替检查 google 或 facebook(不是两者)