[英]Error trapping with regex
我有以下數據框
ColumnA=c("Kuala Lumpur Sector 2 new","old Jakarta Sector31", "Sector 9, 7 Hong Kong","Jakarta new Sector22")
並將部門編號提取到單獨的列中
gsub(".*Sector ?([0-9]+).*","\\1",ColumnA)
如果'Sector'不在一行上,是否存在比if else語句更優雅的捕獲錯誤的方法?
如果單詞“ Sector”沒有出現在一行上,我只想將該行的值設置為空白。
我考慮過先使用str_detect來查看“ Sector”是否為TRUE / FALSE,但這是一個非常丑陋的解決方案。
謝謝你的幫助。
如果單詞“ Sector”沒有出現在一行上,我只想將該行的值設置為空白。
為此,請使用交替運算符|
:
ColumnA=c("Kuala Lumpur 2 new","old Jakarta Sector31", "Sector 9, 7 Hong Kong","Jakarta new Sector22")
gsub("^(?:.*Sector ?([0-9]+).*|.*)$","\\1",ColumnA)
結果: [1] "" "31" "9" "22"
(由於Kuala Lumpur 2 new
沒有Sector
,第二部分沒有捕獲組匹配整個字符串)。
library(stringr)
as.vector(sapply(str_extract(ColumnA, "(?<=Sector\\s{0,10})([0-9]+)"),function(x) replace(x,is.na(x),'')))
我認為這就是您所需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.