R 从字符串中提取文本名称

R 从字符串中提取文本名称,r,R,我有一个值为的列 红龙虾CA04606或 红龙虾纽约WY 245 n等 我如何从中提取红龙虾或红龙虾纽约的名称。我正在尝试使用stringr包。 是否有一种方法可以检查它是否只包含文本,并且可以忽略其中包含数字的值 非常感谢您的帮助。感谢使用strsplit和grepl的组合 这将按空间分割,然后测试是否有被分割的向量数字,并仅将没有数字的数字粘贴在一起。使用strsplit和grepl的组合 这将按空格拆分,然后测试是否有被拆分的矢量数字,并仅将没有数字的数字粘贴在一起。请尝试gsub 试试g

我有一个值为的列

红龙虾CA04606或 红龙虾纽约WY 245 n等

我如何从中提取红龙虾或红龙虾纽约的名称。我正在尝试使用stringr包。 是否有一种方法可以检查它是否只包含文本,并且可以忽略其中包含数字的值

非常感谢您的帮助。感谢使用strsplit和grepl的组合

这将按空间分割,然后测试是否有被分割的向量数字,并仅将没有数字的数字粘贴在一起。

使用strsplit和grepl的组合

这将按空格拆分,然后测试是否有被拆分的矢量数字,并仅将没有数字的数字粘贴在一起。

请尝试gsub

试试gsub


既然您正在尝试使用stringr,我建议您使用str_extract,即使您没有尝试使用stringr,我也会推荐它:

注意-如果您的字符串在邮政编码后面有非数字,则上面只返回前面的单词。因此,在下面的示例中,如果您想在“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"

既然您正在尝试使用stringr,我建议您使用str_extract,即使您没有尝试使用stringr,我也会推荐它:

注意-如果您的字符串在邮政编码后面有非数字,则上面只返回前面的单词。因此,在下面的示例中,如果您想在“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"
替代gsub版本:

替代gsub版本:

这是循序渐进的

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)
这是循序渐进的

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)

谢谢@geektrader。非常有魅力:谢谢@geektrader。工作起来很有魅力:谢谢大家,现在我可以做很多选择了:。。非常感谢您的及时回复。您想匹配没有数字的完整单词吗?不需要完全匹配,我只需要将其余的名字分开。谢谢各位,现在我可以做这么多选择:。。非常感谢您的及时回复。您想匹配没有数字的完整单词吗?不需要完全匹配,我只需要将其余的名字分开。谢谢@Mathematic coffee。。这是我写一个完整函数的完美选择。谢谢@Mathematic coffee。。这是我写的一个完美的完整函数。
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"
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)