我有一个值为
的列" RED LOBSTER CA04606"要么 " Red Lobster NewYork WY245"等等
如何从中提取名称Red Lobster或Red Lobster NewYork。我试着使用stringr包。
有没有办法检查它的文本是否只能忽略带有数字的值?
非常感谢任何帮助。谢谢
答案 0 :(得分:3)
尝试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 "
答案 1 :(得分:2)
使用strsplit
和grepl
sapply(strsplit(x, ' '), function(x) paste(x[!grepl('[[:digit:]]',x)], collapse = ' '))
按空格分割,然后测试是否有数字分割矢量,只粘贴没有数字的那些。
答案 2 :(得分:2)
由于您尝试使用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"
答案 3 :(得分:0)
备用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"
答案 4 :(得分:0)
这是一步一步
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)