2016-04-28 4 views
0

Ich habe eine verschachtelte JSON-Datei mit Verkaufsinformationen, und ein Teil der Datei istWie ersetzt man mehrere Wörter in einer JSON-Datei in R?

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

ich auch eine CSV-Datei mit Produktcode und Produktnamen hat, wie dies

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

kann ich nicht finde heraus, wie man jeden Produktcode (insgesamt gibt es mehr als 32.000 Produktcodes) unter Verwendung von gsub oder einer effizienten Methode ersetzt. Mit anderen Worten, ich kann nicht finden, wie diese Zeilen für jedes Produkt Code zu replizieren

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

Ich versuche die json zu data.frame zu konvertieren und dann verwenden, um die join() Funktion, die mit plyr Paket kommt, aber das ist nicht ein effizienter Ansatz und ich erhalte viele NAs trotz der Liste der Codes ist die vollständige Liste des Ladens.

+1

Ist der 'code' in der csv-Datei der' product_id' in der json-Datei? – Psidom

+0

Danke, ich habe ihn geändert zeigen Sie einen Teil der ursprünglichen csv – pachamaltese

Antwort

0

Hmm, ein Ratespiel hier ohne ein wirklich reproduzierbares Beispiel. Genau wie @Psidom frage ich mich, ob code in der CSV war das gleiche wie product_id und JSON-Datei.

Allerdings sind hier einige Ideen/Konzepte, die wahrscheinlich für Sie nützlich sind:

die jsonlite Paket. Die Funktion fromJSON wird Ihren JSON leicht analysieren und in eine R-Liste umwandeln. Je nachdem, wie verschachtelt sie sind, können Sie entweder unlist (mit rekursiv = FALSE-Option) oder do.call mit rbind verwenden, je nachdem, was Sie tun möchten.

Angenommen, dass Code und Produkt-ID identisch sind, können Sie einfach merge verwenden. Wenn Sie dies tun, geben Sie den beiden Spalten die gleiche und es wird sofort funktionieren (Sie können verschiedene Spaltennamen für die Zusammenführung verwenden .. aber es ist einfacher, wenn sie den gleichen Namen haben.

Beitritt 32'000 auf einem einzigen Index klingt nicht wie eine große Sache zu mir.So Merge (was ziemlich langsam ist) sollte die Arbeit tun.Falls es zu lange für Sie dauert, beachten Sie bitte die data.table package.Die Syntax ist anders, aber das Paket ist erstaunlich schnell und gut Wenn Sie Leistungsprobleme beim Zusammenführen von Datensätzen feststellen, ist data.table möglicherweise eine gute Option für Sie.

+0

Vielen Dank. "Code" war "Produkt-ID" in der ursprünglichen csv fi les. Die Codes in den CSV-Dateien sind die gleichen wie in den JSON-Dateien. – pachamaltese

+0

In diesem Fall ist es einfach mit Merge zu tun. Wenn das zu langsam ist, schauen Sie in data.table nach. aber ich bezweifle, dass du es musst. –

Verwandte Themen