Обратите внимание, что ваш файл JSON в опубликованном виде является неполным и в нем отсутствуют закрывающие скобки.
Один из вариантов воспроизведения ожидаемого результата - unnest
данные в элементе rows
вывода fromJSON
.
library(jsonlite)
json_data <- fromJSON("sample.json")
library(tidyverse)
json_data$rows %>%
select(-itemId) %>%
unnest() %>%
group_by(value) %>%
mutate(n = 1:n()) %>%
spread(n, data) %>%
ungroup()
## A tibble: 3 x 5
# value `1` `2` `3` `4`
# <chr> <dbl> <dbl> <dbl> <dbl>
#1 PNIFBOIKLplumdb 3 1.00 1243. 545.
#2 PNIwTjWWjphkqfu 5 1.00 57.9 30.8
#3 Unspecified 220 1.00 0.295 2.89
Объяснение: я рекомендую построчно просматривать код, чтобы понять, что делает каждая команда. Короче говоря: json_data$rows
- это data.frame
; мы выбираем все столбцы, кроме itemId
и unnest
данные в list
столбец data
. Это приводит к тому, что ваши данные отображаются в длинном формате, поэтому для того, чтобы воспроизвести ожидаемые вами данные, нам необходимо изменить данные с длинных на широкие. Для этого мы группируем записи по value
, добавляем счетчик и используем spread
, чтобы получить окончательный результат.
Содержимое файла "sample.json"
{
"totalPages": 1,
"firstPage": true,
"lastPage": true,
"numberOfElements": 1757,
"number": 0,
"totalElements": 1757,
"columns": {
"dimension": {
"id": "variables/evar4",
"type": "string"
},
"columnIds": [
"1",
"2",
"3",
"4"
]
},
"rows": [
{
"itemId": "0",
"value": "Unspecified",
"data": [
220,
1.0002442201269182,
0.29499089253187616,
2.890909090909091
]
},
{
"itemId": "118293442",
"value": "PNIwTjWWjphkqfu",
"data": [
5,
1.0002442201269182,
57.879999999999995,
30.8
]
},
{
"itemId": "1810135314",
"value": "PNIFBOIKLplumdb",
"data": [
3,
1.0002442201269182,
1243.0277777777778,
545.3333333333334
]
}
]
}