各エントリがセミコロンで区切られた 1 つ以上の文字列 (またはおそらく文字 (0)) であるベクトル v があります。
ABC
DEF;ABC;QWE
TRF
character(0)
ABC;GFD
「;」で分割した後、「ABC」(1、2、5または論理ベクトルT、T、F、F、T)を含むベクトルのインデックスを見つける必要があります。
現在、次のようにループを使用しています。
toSelect=integer(0)
for(i in c(1:length(v))){
if(length(v[i])==0) next
words=strsplit(v[i],";")[[1]]
if(!is.na(match("ABC",words))) toSelect=c(toSelect,i)
}
残念ながら、私のベクターには 450k のエントリがあるため、これには時間がかかりすぎます。次のようなことを行って論理ベクトルを作成することをお勧めします
toSelect=(!is.na(match("ABC",strsplit(v,";")))
しかし、strsplit はリストを返すため、strsplit(v,";") をベクトルとして適切にフォーマットする方法を見つけることができません (インデックスを台無しにするため、unlist は実行できません)。このコードをスピードアップする方法について誰かアイデアがありますか?
ありがとう!