2010-08-30 84 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数组。

相关问题