これにはstringi()
は必要ありません。データをクエリする最速の方法は、data.table()
にcountry
のキーを使用し、grepl()
を使用してデータをサブセット化することです。
treemap
パッケージのGNI2014データを使用する例。
library(treemap)
library(data.table)
data(GNI2014)
gni2014table <- data.table(GNI2014)
setkey(gni2014table,"country")
searchText <- "berm"
gni2014table[grepl(searchText,gni2014table$country,ignore.case=TRUE),]
searchText <- "United"
gni2014table[grepl(searchText,gni2014table$country,ignore.case=TRUE),]
...と出力します。
> library(treemap)
> library(data.table)
> data(GNI2014)
> gni2014table <- data.table(GNI2014)
> setkey(gni2014table,"country")
> searchText <- "berm"
> gni2014table[grepl(searchText,gni2014table$country,ignore.case=TRUE),]
iso3 country continent population GNI
1: BMU Bermuda North America 67837 106140
>
> searchText <- "United"
> gni2014table[grepl(searchText,gni2014table$country,ignore.case=TRUE),]
iso3 country continent population GNI
1: ARE United Arab Emirates Asia 4798491 44600
2: GBR United Kingdom Europe 62262000 43430
3: USA United States North America 313973000 55200
>
UIのフィールドに値を設定したい列だけを返します。
searchText <- "United Arab"
gni2014table[grepl(searchText,gni2014table$country,ignore.case=TRUE),country]
UPDATE 2017年12月20日:20ミリ秒の高速stringi_detect_fixed()
より実行し、第2の場合にlgrepl()
最初のテストケースでは、stringi_detect_fixed()
は、60ミリ秒より速いlgrepl()
よりも100回の反復のためのものであることを示す、マイクロベンチマークを実行するためのコードを追加要求の
library(treemap)
library(data.table)
library(microbenchmark)
data(GNI2014)
gni2014table <- data.table(GNI2014)
setkey(gni2014table,"country")
searchText <- "berm"
microbenchmark(gni2014table[grepl(searchText,gni2014table$country,
ignore.case=TRUE),])
searchText <- "United Arab"
microbenchmark(gni2014table[grepl(searchText,gni2014table$country,
ignore.case=TRUE),country])
library(stringi)
searchText <- "berm"
microbenchmark(gni2014table[stri_detect_fixed(searchText,
gni2014table$country,
case_insensitive=TRUE),])
searchText <- "United Arab"
microbenchmark(gni2014table[stri_detect_fixed(searchText,
gni2014table$country,case_insensitive=TRUE),])
あなたはmicrobenchmark()
の出力はSOで簡単に表示されませんので、自分でベンチマークを再現するコードを実行する必要があります。 、タイミングの要約版を言っ
は次のとおりです。答えを
searchText Function Mean (in Microseconds)
------------- -------------------- -----------------------
berm grepl 526.2545
United Arab grepl 583.1789
berm stringi_detect_fixed 545.8772
United Arab stringi_detect_fixed 524.1132
感謝。私はsrtingiがそれぞれのフィールドにbigi-shのチャンクを持つ大きなデータフレームを持っていることを考えれば、srtingiが好ましいオプションだと思っています。https://stackoverflow.com/q/24257850/3967488 – magasr
@magasrあなたが投稿したURL矛盾したタイミングでは、grepl()がstringi_detect_fixed()よりも高速で、もう一方の答えが逆であることが示されています。あなたの実際の問題のマイクロベンチマークを含むように私の投稿を更新すると、ソリューションをコード化したときに、grepl()で検索する方が速くなりますが、stringi_detect_fixed()では検索が高速になります。つまり、各コールの100回の反復の結果は、お互いに60ミリ秒以内であるか、または個々のコールごとに実質的に区別できません。 –
編集: "... 100反復の結果はお互いに60マイクロ秒以内です"。 –