1

次の値を持つ列があります

「RED LOBSTER CA04606」または「Red Lobster NewYork WY245」など

そこから Red Lobster または Red Lobster NewYork という名前だけを抽出するにはどうすればよいでしょうか。stringr パッケージを使用しようとしています。
テキストのみで、数値を含む値を無視できるかどうかを確認する方法はありますか?

どんな助けでも大歓迎です。ありがとう

4

5 に答える 5

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 "
于 2013-04-03T05:02:40.080 に答える
3

を使用しようとしているので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' が抽出されるのを防ぎます。

末尾のスペースが気に入らない場合は、使用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"
于 2013-04-03T05:09:34.280 に答える
2

strsplitとの組み合わせを使用するgrepl

 sapply(strsplit(x, ' '), function(x) paste(x[!grepl('[[:digit:]]',x)], collapse = ' '))

これはスペースで分割し、数字で分割されたベクトルがあるかどうかをテストし、数字のないものだけを貼り付けます。

于 2013-04-03T05:02:15.273 に答える
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)
于 2013-04-03T05:25:01.370 に答える
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"  
于 2013-04-03T05:10:34.583 に答える