我有一列值为
“RED LOBSTER CA04606”或“Red Lobster NewYork WY245”n 等等
如何从中提取名称 Red Lobster 或 Red Lobster NewYork。我正在尝试使用 stringr 包。
有没有办法检查它是否只有文本并且可以忽略其中带有数字的值?
非常感谢任何帮助。谢谢
我有一列值为
“RED LOBSTER CA04606”或“Red Lobster NewYork WY245”n 等等
如何从中提取名称 Red Lobster 或 Red Lobster NewYork。我正在尝试使用 stringr 包。
有没有办法检查它是否只有文本并且可以忽略其中带有数字的值?
非常感谢任何帮助。谢谢
尝试gsub
> x <- "RED LOBSTER CA04606"
> gsub("\\S*\\d+\\S*",'', x)
[1] "RED LOBSTER "
> x<-"Red Lobster NewYork WY245"
> gsub("\\S*\\d+\\S*",'', x)
[1] "Red Lobster NewYork "
> x<-"Red Lobster NewYork WY245 BLUE LOBSTER CA04606"
> gsub("\\S*\\d+\\S*",'', x)
[1] "Red Lobster NewYork BLUE LOBSTER "
由于您正在尝试使用stringr
,我建议str_extract
(即使您不尝试使用,我也会推荐它stringr
):
x <- c('RED LOBTSER CA04606', 'Red Lobster NewYork WY245')
str_extract(x, '[a-zA-Z ]+\\b')
# [1] "RED LOBSTER " "Red Lobster NewYork "
正则表达式中的 '\b' 可防止提取 'CA04606' 中的 'CA'。
如果您不喜欢那个尾随空格,您可以使用str_trim
它来删除它,或者您可以修改正则表达式:
str_extract(x, '[a-zA-Z]+(?: +[a-zA-Z]+)*\\b')
# [1] "RED LOBSTER" "Red Lobster NewYork"
注意 - 如果您的字符串在邮政编码后有非数字,则上面只返回之前的单词。所以在下面的例子中,如果你想在'WY245'之后得到'NewYork',你可以使用str_extract_all
并将结果粘贴在一起:
x <- c(x, 'Red Lobster WY245 NewYork')
str_extract_all(x, '[a-zA-Z]+(?: +[a-zA-Z]+)*\\b')
# [[1]]
# [1] "RED LOBSTER"
#
# [[2]]
# [1] "Red Lobster NewYork"
#
# [[3]]
# [1] "Red Lobster" "NewYork"
# Paste the bits together with paste(..., collapse=' ')
sapply(str_extract_all(x, '[a-zA-Z]+(?: +[a-zA-Z]+)*\\b'), paste, collapse=' ')
# [1] "RED LOBSTER" "Red Lobster NewYork" "Red Lobster NewYork"
使用strsplit
和的组合grepl
sapply(strsplit(x, ' '), function(x) paste(x[!grepl('[[:digit:]]',x)], collapse = ' '))
这按空格分割,然后测试是否有数字分割向量,并且只将没有数字的粘贴在一起。
替代gsub
版本:
x <- c("RED LOBSTER CA04606","Red Lobster NewYork WY245")
gsub("(.+)\\s+(.+$)","\\1",x)
[1] "RED LOBSTER" "Red Lobster NewYork"
并获取文本的另一部分:
gsub("(.+)\\s+(.+$)","\\2",x)
[1] "CA04606" "WY245"
这是一步一步
mystr<-"Red Lobster NewYork WY245"
r<-regexpr("[A-Z][A-Z][0-9]+", mystr)
s<-substr(mystr, r[1], r[1] + attr(r, "match.length"))
mystr<-sub(s, "", mystr)