使用正则表达式捕获错误
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,但这是一个很丑陋的解决方案。
感谢您的帮助。
library(stringr)
as.vector(sapply(str_extract(ColumnA, "(?<=Sector\s{0,10})([0-9]+)"),function(x) replace(x,is.na(x),'')))
我想这就是你需要的。
If the word 'Sector' does not appear on one line I simply want to set the value of that row to blank.
为此,使用交替运算符 |
:
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
,没有捕获组的第二部分匹配整个字符串)。
我有以下数据框
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,但这是一个很丑陋的解决方案。
感谢您的帮助。
library(stringr)
as.vector(sapply(str_extract(ColumnA, "(?<=Sector\s{0,10})([0-9]+)"),function(x) replace(x,is.na(x),'')))
我想这就是你需要的。
If the word 'Sector' does not appear on one line I simply want to set the value of that row to blank.
为此,使用交替运算符 |
:
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
,没有捕获组的第二部分匹配整个字符串)。