是否可以在R中以JSON格式将表写入文件?

时间:2010-08-30 12:46:03

标签: json r

我正在用R创建单词频率表,首选输出格式是JSON文件。 ......好吧    {      “字”:“狗”,      “频率”:12    } 有没有办法将表格直接保存为这种格式?我一直在使用write.csv()函数并将输出转换为JSON,但这非常复杂且耗时。

3 个答案:

答案 0 :(得分: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/对其进行验证,以获得相当的格式。如果你有多维表,你必须稍微解决一下......

编辑:

哦,现在我明白了,您希望将数据集特征下沉到JSON文件中。没问题,只需给我们一个示例数据,我会稍微研究一下代码。实际上,您需要将数据转换为所需的格式,从而将其转换为JSON。 list应该足够了。给我一点,我会更新我的答案。

编辑#2:编辑#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来解决它。

我希望这有点帮助...

答案 1 :(得分:1)

这些天我通常会使用jsonlite包。 库( “jsonlite”) toJSON(mydatatable,pretty = TRUE) 这会将数据表直接转换为键/值对对象的JSON数组。

答案 2 :(得分:0)

RJSONIO是一个“允许以Javascript对象表示法(JSON)格式转换数据的程序包”。您可以使用它将对象导出为JSON文件。

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