2016-11-04 79 views
0

我有发布者的名单看起来像这样的范围内:的R - 多重搜索和替换基于部分匹配一个数据帧的一列

+--------------+ 
| Site Name | 
+--------------+ 
| Radium One | 
| Euronews  | 
| EUROSPORT | 
| WIRED  | 
| RadiumOne | 
| Eurosport FR | 
| Wired US  | 
| Eurosport | 
| EuroNews  | 
| Wired  | 
+--------------+ 

我想创建以下结果:

+--------------+----------------+ 
| Site Name | Publisher Name | 
+--------------+----------------+ 
| Radium One | RadiumOne  | 
| Euronews  | Euronews  | 
| EUROSPORT | Eurosport  | 
| WIRED  | Wired   | 
| RadiumOne | RadiumOne  | 
| Eurosport FR | Eurosport  | 
| Wired US  | Wired   | 
| Eurosport | Eurosport  | 
| EuroNews  | Euronews  | 
| Wired  | Wired   | 
+--------------+----------------+ 

我想知道我怎么能复制这个代码,我在电源查询使用:

搜索前4个字符

如果Text.Start([网站名称],4)= “线”,然后 “有线的” else

搜索最后3个字符

如果Text.End([网站名],3)=“一“,然后‘RadiumOne’其他

如果没有找到匹配,再加入‘休息’

它没有区分大小写。

+0

貌似没有任何统一的模式,即'RadiumOne'仍然是'RadiumOne '而'EuroNews'更改为'Euronews' – akrun

+0

这是事实,但这只是一个部分案例。我们来看看具有'Cloud_DCUInteractive_FR_970x250_RM_03.zip'并希望仅用'DCU'查找并替换它的情况? – Greg

回答

0

运用ifultools包和gsubproperCase,我们第一个字后取代一切“”即删除,并separtely对待镭的例外情况。如果你有很多例外,如镭情况下,请更新您的那些帖子,这样我们可以找到一个更简洁的解决方案,这个技巧:)

library("ifultools") 

siteName=c("Radium One","Euronews","EUROSPORT","WIRED","RadiumOne","Eurosport FR","Wired US","Eurosport","EuroNews","Wired") 

publisherName = gsub("^Radium$","Radiumone",gsub("\\s+.*","",properCase(siteName))) 

# [1] "Radiumone" "Euronews" "Eurosport" "Wired"  "Radiumone" "Eurosport" "Wired"  
# [8] "Eurosport" "Euronews" "Wired" 
+0

这可以根据大小写和第一个单词来工作,但是如果我想要基于部分匹配('。*'style)具有相当于一系列嵌套'gsub'的操作?例如,用'DCU'搜索和替换'CloudDCU_MEA_BAN_V1','PIH'用'Cld_PIHEN_TD_01','Teme用'Clod_TemeE_MEA_STD_01'。 – Greg

+0

在你的输入中是否有任何模式的表象,正如前面正确提到的@akrun,如果没有模式可以利用它,不可能推广一个正则表达式 – OdeToMyFiddle

相关问题