Я делаю таблицы частоты слов с R, а предпочтительным форматом вывода будет JSON файл. Мне нравится { "слово": "собака", "частота": 12 } Есть ли способ сохранить таблицу непосредственно в этом формате? Я использую функцию write.csv() и преобразовываю вывод в JSON, но это очень сложно и требует много времени.
Возможно ли записать таблицу в файл в формате JSON в R?
Ответ 1
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.
Надеюсь, это немного помогло...
Ответ 2
Возможно, вы можете использовать пакет rjson.
Ответ 3
В эти дни я обычно использовал пакет jsonlite.
library("jsonlite")
toJSON(mydatatable, pretty = TRUE)
Это превращает таблицу данных в массив JSON объектов пары ключ/значение напрямую.
Ответ 4
RJSONIO - это пакет, который позволяет конвертировать в и из данных в формате Javascript (JSON). Вы можете использовать его для экспорта своего объекта в виде файла JSON.
library(RJSONIO)
writeLines(toJSON(anobject), "afile.JSON")