2010-08-30 68 views
11

我用R製作詞頻表,首選的輸出格式是JSON文件。就像 { 「word」:「狗」, 「頻率」:12 } 有什麼辦法可以直接將表格保存爲這種格式嗎?我一直在使用write.csv()函數並將輸出轉換爲JSON,但這非常複雜且耗時。是否可以在R中以JSON格式將表寫入一個文件?

+0

install.packages(「fortunes」); require(fortunes); fortune(which =「Evelyn」) – fmark 2013-03-09 14:52:58

回答

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} 

甚至更​​好:

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} 

然後用http://www.jsonlint.com/驗證它變得相當格式。如果你有多維表,你必須解決它有點...

編輯:

哦,現在我明白了,你想要的數據集特性沉-ED的JSON文件。沒問題,只要給我們一個樣本數據,我會稍微處理一段代碼。實際上,您需要將數據轉換爲理想的格式,然後將其轉換爲JSON。 list就足夠了。給我一下,我會更新我的答案。

編輯#2: 好了,時間是相對的......這是一個常識......在這裏你去:

(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 

如果dtf是一個簡單的數據幀,是的,data.frame,如果它不是,脅迫它!長話短說,你可以這樣做:

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

不過,我覺得我需要一些melt與這一個,但簡單t的伎倆。現在,您只需在轉置data.frame後處理列名。 t強制data.frames到矩陣,所以你需要將它轉換回data.frame。我使用了as.data.frame,但您也可以使用toJSON(data.frame(t(dtf))) - 您將獲得X而不是V作爲變量名稱。或者,您可以使用regexp來清理JSON文件(如果需要),但這是一個糟糕的做法,嘗試通過準備data.frame來解決它。

我希望這有助於有點...

+0

非常感謝!你的回答幫了我:D – txxwq 2010-08-31 14:39:32

6

你大概可以使用rjson包。

+1

不是它將表格作爲JSON對象序列化到文件中嗎?我需要的是帶有JSON格式數據的純文本文件。 – txxwq 2010-08-30 12:55:30

+0

JSON是純文本格式......問題是什麼? – mbq 2010-08-30 13:04:37

+7

請參閱?writeLines:writeLines(toJSON(anobject),file =「afile。txt「) – 2010-08-30 13:06:02

0

RJSONIO是一包「允許轉換和從以JavaScript對象符號(JSON)格式的數據。」您可以使用它將對象導出爲JSON文件。

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

我建議你寫一些解釋和代碼一起幫助OP更好地理解答案。 – Joe 2013-07-20 21:24:06

+0

@Joe:你期待很多,自包含的代碼 - >細節和代碼,diffuse question-> diffuse answer。 – 2013-07-23 08:44:01

+0

不是真的 - 只是幾個字就好(像@ cafe876加了,謝謝!)純代碼沒有評論並不是那麼有幫助,這也是原始問題三年後的答案,這意味着我希望能從答案中得到更多答案(3年前的一個壞問題應該被忽略)。 – Joe 2013-07-23 14:02:19

1

這幾天我通常會使用jsonlite包。

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

這將數據表直接轉換爲鍵/值對對象的JSON數組。

相關問題