2010-08-30 23 views
11

Tôi đang tạo các bảng tần số từ với R và định dạng đầu ra ưu tiên sẽ là một tệp JSON. sth như { "từ": "chó", "tần suất": 12 } Có cách nào để lưu bảng trực tiếp sang định dạng này không? Tôi đã sử dụng hàm write.csv() và chuyển đổi kết quả đầu ra thành JSON nhưng điều này rất phức tạp và tốn thời gian.Có thể ghi một bảng vào một tệp ở định dạng JSON trong R không?

+0

install.packages ("vận may"); yêu cầu (vận may); tài sản (mà = "Evelyn") – fmark

Trả lời

12
set.seed(1) 
(tbl <- table(round(runif(100, 1, 5)))) 

## 1 2 3 4 5 
## 9 24 30 23 14 

library(rjson) 
sink("json.txt") 
cat(toJSON(tbl)) 
sink() 

file.show("json.txt") 
## {"1":9,"2":24,"3":30,"4":23,"5":14} 

hoặc thậm chí tốt hơn:

set.seed(1) 
(tab <- table(letters[round(runif(100, 1, 26))])) 

a b c d e f g h i j k l m n o p q r s t u v w x y z 
1 2 4 3 2 5 4 3 5 3 9 4 7 2 2 2 5 5 5 6 5 3 7 3 2 1 

sink("lets.txt") 
cat(toJSON(tab)) 
sink() 
file.show("lets.txt") 
## {"a":1,"b":2,"c":4,"d":3,"e":2,"f":5,"g":4,"h":3,"i":5,"j":3,"k":9,"l":4,"m":7,"n":2,"o":2,"p":2,"q":5,"r":5,"s":5,"t":6,"u":5,"v":3,"w":7,"x":3,"y":2,"z":1} 

Sau đó xác nhận nó với http://www.jsonlint.com/ để có được định dạng khá. Nếu bạn có bảng đa chiều, bạn sẽ phải làm việc nó ra một chút ...

EDIT:

Oh, bây giờ tôi thấy, bạn muốn những đặc điểm dữ liệu chìm-ed vào một tập tin JSON. Không sao cả, chỉ cần cung cấp cho chúng tôi dữ liệu mẫu và tôi sẽ làm việc trên một đoạn mã một chút. Thực tế, bạn cần phải thực hiện các dữ liệu thành định dạng mong muốn, do đó chuyển đổi nó thành JSON. list là đủ. Cho tôi một chút, tôi sẽ cập nhật câu trả lời của tôi.

EDIT # 2: Vâng, thời gian là tương đối ... đó là một phổ biến kiến ​​thức ... Ở đây bạn đi:

(dtf <- structure(list(word = structure(1:3, .Label = c("cat", "dog", 
"mouse"), class = "factor"), frequency = c(12, 32, 18)), .Names = c("word", 
"frequency"), row.names = c(NA, -3L), class = "data.frame")) 

## word frequency 
## 1 cat  12 
## 2 dog  32 
## 3 mouse  18 

Nếu dtf là một khung dữ liệu đơn giản, vâng, data.frame, nếu nó không phải, ép buộc nó! câu chuyện dài ngắn, bạn có thể làm:

toJSON(as.data.frame(t(dtf))) 
## [1] "{\"V1\":{\"word\":\"cat\",\"frequency\":\"12\"},\"V2\":{\"word\":\"dog\",\"frequency\":\"32\"},\"V3\":{\"word\":\"mouse\",\"frequency\":\"18\"}}" 

tôi mặc dù tôi sẽ cần một số melt với thế này, nhưng đơn giản t đã làm các trick. Bây giờ, bạn chỉ cần xử lý các tên cột sau khi chuyển đổi data.frame. t coerces data.frames thành ma trận, vì vậy bạn cần phải chuyển đổi nó trở lại data.frame. Tôi đã sử dụng as.data.frame, nhưng bạn cũng có thể sử dụng toJSON(data.frame(t(dtf))) - bạn sẽ nhận được X thay vì V làm tên biến. Ngoài ra, bạn có thể sử dụng regexp để làm sạch tệp JSON (nếu cần), nhưng đó là một thực hành tệ hại, hãy thử làm việc đó bằng cách chuẩn bị data.frame.

Tôi hy vọng điều này giúp một chút ...

+0

Cảm ơn bạn rất nhiều! Câu trả lời của bạn đã giúp tôi: D – txxwq

6

Bạn có thể sử dụng gói rjson.

+1

Không serialize bảng dưới dạng đối tượng JSON thành tệp? Những gì tôi cần là một tệp văn bản thuần túy với dữ liệu ở định dạng JSON. – txxwq

+0

JSON là định dạng văn bản thuần túy ... có vấn đề gì? – mbq

+7

xem? WriteLines: writeLines (toJSON (anobject), file = "afile.txt ") –

0

RJSONIO là một gói phần mềm "cho phép chuyển đổi đến và đi từ dữ liệu ở định dạng Javascript ký hiệu đối tượng (JSON)". Bạn có thể sử dụng nó để xuất đối tượng của mình dưới dạng tệp JSON.

library(RJSONIO)  
writeLines(toJSON(anobject), "afile.JSON") 
+0

Tôi khuyên bạn nên viết một số lời giải thích cùng với mã để giúp OP hiểu câu trả lời tốt hơn – Joe

+0

@Joe: bạn –

+0

Không thực sự - chỉ một vài từ là tốt (như @ cafe876 được thêm vào, cảm ơn vì điều đó!) Mã thuần túy không có ý kiến ​​gì cả Nó cũng không phải là hữu ích, nó cũng là một câu trả lời ba năm sau câu hỏi ban đầu, có nghĩa là tôi mong đợi nhiều hơn một chút từ câu trả lời (một câu hỏi xấu từ 3 năm trước đây chỉ nên bỏ qua). – Joe

1

Những ngày này tôi thường sử dụng gói jsonlite.

library("jsonlite") 
toJSON(mydatatable, pretty = TRUE) 

Điều này sẽ chuyển bảng dữ liệu thành mảng JSON của đối tượng cặp khóa/giá trị trực tiếp.

Các vấn đề liên quan