2016-11-04 80 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

相關問題