2016-04-28 12 views
0

私は、販売情報と、ネストされたJSONファイルを持っているし、ファイルの一部は、私はまた、私はできません。このRのjsonファイルで複数の単語を置き換える方法は?

product_id product_name 
0141602 toys for children 0-2 years 
… etc … 
0141230 wooden furniture 

のように、製品コード、製品名でcsvファイルを持っている

"sales": { 
     "sales_val": 22549 
     "units_in_stock": 251 
     "product_id": "0141602" 
    } 

ですgsubまたは効率的な方法を使用して、すべての製品コードを置き換える方法(合計32,000個の製品コードがあります)を把握します。言い換えれば、私はすべての製品コード

file <- readLines("sales.json") 
replace <- gsub(pattern = "001", replace = "toys", x = file) 
writeLines(replace, con="sales2.json") 

ためにこれらの行を複製する方法を見つけることができない私はdata.frameにJSONを変換しようと、その後plyrパッケージが付属していますが、それは、効率的なアプローチではありませんjoin()機能を使用しましたコードのリストが店の完全なリストであるにもかかわらず、私は多くのNAを取得しています。

+1

csvファイルの 'code'がjsonファイルの' product_id'ですか? – Psidom

+0

ありがとう、私はそれを修正しました。あなたはデータセットをマージする際のパフォーマンスの問題に遭遇しました。元のcsvの一部を表示 – pachamaltese

答えて

0

ええと、まったく再現可能な例がないと推測ゲームのようなものです。 @Psidomと同じように、csvのcodeproduct_idとjsonファイルと同じだったのだろうかと思います。

はしかし、ここでは、おそらくあなたに役立ついくつかのアイデア/アプローチです:

jsonliteパッケージを取得します。関数fromJSONはJSONを簡単に解析し、それをRリストに変換します。次に、入れ子に応じて、unlist(再帰= FALSEオプション付き)またはdo.callrbind)のいずれかを使用できます。

codeとproduct_idが同じであると仮定すると、単純にmergeを使用できます。もし同じ名前を持っていれば、2つの列に同じものを与えてください。同じ名前を使うと別の列名を使うこともできますが、同じ名前を持っていれば簡単です。

単一のインデックスに32'000を結びつける私にとって大きな問題のようには聞こえませんので、マージ(むしろ遅い)は仕事をしなければなりません。あなたには時間がかかりすぎる場合は、data.table packageを考えてください。構文は異なりますが、パッケージは驚くほど速く、

+0

ありがとうございました。「コード」は元のcsvファイルの「製品ID」でしたレズ。 csvファイルに含まれるコードはjsonファイルと同じです。 – pachamaltese

+0

その場合、マージするのは簡単です。それが遅すぎるとdata.tableを見てください。しかし、私はあなたが必要と疑う。 –