2015-02-16 3 views
0

Я искал форум и не мог найти аналогичный вопрос, поэтому прошу прощения, если я, возможно, его пропустил.R - Не удалось создать файл JSON

Просто я получил файл JSON, и я хочу его создать. Поэтому я подумал, что простой способ сделать это - проанализировать файл с помощью функции fromJSON из пакета jsonlite и посмотреть, как структурирован объект R, а затем попытаться создать файл JSON, сначала создав объект R и используя функцию toJSON.

JSON файл, который я дал следующий:

[[{"name":"Wine"},{"data":[{"rating":"23.45","month":8,"year":2012,"day":8},{"rating":"23.66","month":8,"year":2012,"day":9},{"rating":"24.75","month":8,"year":2013,"day":9},{"rating":"24.97","month":8,"year":2013,"day":12}]}]] 

Разбор выше JSON файл с fromJSON функции дает следующий объект:

str(object) 

List of 1 
$ :'data.frame': 2 obs. of 2 variables: 
    ..$ name: chr [1:2] "Wine" NA 
    ..$ data:List of 2 
    .. ..$ : NULL 
    .. ..$ :'data.frame': 248 obs. of 4 variables: 
    .. .. ..$ rating: chr [1:248] "23.45" "23.66" "23.59" "23.48" ... 
    .. .. ..$ month : int [1:248] 8 8 8 8 8 8 8 8 8 8 ... 
    .. .. ..$ year : int [1:248] 2012 2012 2012 2012 2012 2012 2012 2012 ... 
    .. .. ..$ day : int [1:248] 8 9 10 13 14 15 16 17 20 21 ... 

Создание указанной выше цели. Значения являются случайными

name = c("Wine", NA) 
data = list(NULL, data.frame(rating = as.character(c(1:248)), month = as.integer(rep(12, 248)), year = as.integer(rep(1940, 248)), day = as.integer(rep(31, 248)), stringsAsFactors = FALSE)) 
result = data.frame(name, data) 

Последняя строка дает ошибку:

Error in data.frame(NULL, list(rating = c("1", "2", "3", "4", "5", "6", : arguments imply differing number of rows: 0, 248 

Кто-нибудь есть идеи?

ответ

0

Очевидно, функция data.frame() повторяет второй элемент списка, который он получает, или что-то в этом роде.

Возможный подход к построению такого кадра данных, как в исходном примере заменить колонку и т.д .:

result <- data.frame(name=name,data=NA) 
result$data <- data 

Тогда у вас есть, как требуется:

str(result) 

'data.frame': 2 obs. of 2 variables: 
$ name: Factor w/ 1 level "Wine": 1 NA 
$ data:List of 2 
    ..$ : NULL 
    ..$ :'data.frame': 248 obs. of 4 variables: 
    .. ..$ rating: chr "1" "2" "3" "4" ... 
    .. ..$ month : int 12 12 12 12 12 12 12 12 12 12 ... 
    .. ..$ year : int 1940 1940 1940 1940 1940 1940 1940 1940 1940 1940 ... 
    .. ..$ day : int 31 31 31 31 31 31 31 31 31 31 ... 
+0

Спасибо вы очень много. Это именно то, что я искал. –

Смежные вопросы