以下のコードを活用して 1 つの一致で部分的に一致させていますが、追加の質問があります。魚の追加基準があり、「犬の魚」を魚と犬の両方に分類したかったとします。これは可能ですか?
d<-data.frame(name=c("brown cat", "blue cat", "big lion", "tall tiger",
"black panther", "short cat", "red bird",
"short bird stuffed", "big eagle", "bad sparrow",
"dog fish", "head dog", "brown yorkie",
"lab short bulldog"), label=1:14)
コードの先頭で正規表現を定義します
regexes <- list(c("(cat|lion|tiger|panther)","feline"),
c("(bird|eagle|sparrow)","avian"),
c("(dog|yorkie|bulldog)","canine"))
df と同じ長さのベクトルを作成します。
output_vector <- character(nrow(d))
各正規表現について..
for(i in seq_along(regexes)){
#Grep through d$name, and when you find matches, insert the relevant 'tag' into
#The output vector
output_vector[grepl(x = d$name, pattern = regexes[[i]][1])] <- regexes[[i]][2]}
その現在入力されている出力ベクトルをデータフレームに挿入します
d$species <- output_vector
望ましい出力
# name label species
#1 brown cat 1 feline
#2 blue cat 2 feline
#3 big lion 3 feline
#4 tall tiger 4 feline
#5 black panther 5 feline
#6 short cat 6 feline
#7 red bird 7 avian
#8 short bird stuffed 8 avian
#9 big eagle 9 avian
#10 bad sparrow 10 avian
#11 dog fish 11 canine, fish
#12 head dog 12 canine
#13 brown yorkie 13 canine
#14 lab short bulldog 14 canine
元のスタック オーバーフローの質問は次のとおりです。r に一致する部分的な文字列