次の値を持つ列があります
「RED LOBSTER CA04606」または「Red Lobster NewYork WY245」など
そこから Red Lobster または Red Lobster NewYork という名前だけを抽出するにはどうすればよいでしょうか。stringr パッケージを使用しようとしています。
テキストのみで、数値を含む値を無視できるかどうかを確認する方法はありますか?
どんな助けでも大歓迎です。ありがとう
次の値を持つ列があります
「RED LOBSTER CA04606」または「Red Lobster NewYork WY245」など
そこから 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' が抽出されるのを防ぎます。
末尾のスペースが気に入らない場合は、使用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 = ' '))
これはスペースで分割し、数字で分割されたベクトルがあるかどうかをテストし、数字のないものだけを貼り付けます。
これは一歩一歩です
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)
代替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"