Можно ли записать таблицу в файл в формате JSON на R? - PullRequest
12 голосов
/ 30 августа 2010

Я делаю таблицы частот слов с R, и предпочтительным форматом вывода будет файл JSON.sth like {"word": "dog", "quency ": 12} Есть ли способ сохранить таблицу непосредственно в этот формат?Я использовал функцию write.csv () и преобразовал вывод в JSON, но это очень сложно и отнимает много времени.

Ответы [ 3 ]

12 голосов
/ 30 августа 2010
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/, чтобы получить хорошее форматирование. Если у вас есть многомерная таблица, вам придется немного ее проработать ...

EDIT:

О, теперь я вижу, вы хотите, чтобы характеристики набора данных были преобразованы в файл 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.

Надеюсь, это немного помогло ...

1 голос
/ 08 октября 2015

В эти дни я обычно использую пакет jsonlite .

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

Это превращает таблицу данных в массив JSON объектов пары ключ / значение напрямую.

0 голосов
/ 21 июля 2013

RJSONIO - это пакет, «который позволяет преобразовывать данные в формат нотации объектов Javascript (JSON)».Вы можете использовать его для экспорта вашего объекта в виде файла JSON.

library(RJSONIO)    
writeLines(toJSON(anobject), "afile.JSON")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...