Создать вложенный JSON-объект в R - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть некоторые данные, которые выглядят так:

  flyFrom flyTo price
1     AAE   ALG    48
2     AAE   ORN    84
3     AAE   MRS   158
4     AAE   LYS   186
5     AAE   ORY   198
6     AAE   IST   374
...

, и я хочу преобразовать их в что-то вроде этого:

{"AAE": [
    "ALG", 48,
    "ORN", 84,
    "MRS", 158,
    "LYS", 186,
    "ORY", 198,
    "IST", 374
...
],
"YYE": [
    "YXY", 48,
    "YDQ", 78,
    "YXJ", 200
]}

Я потратил около часа, пробуя разные вещи, ноЯ не уверен, как получить это в структуре, которую я хочу.Я использую jsonlite прямо сейчас, но я могу использовать все, что вы порекомендуете

edit: я хочу, чтобы столбец цен также был включен, но я также не уверен, какой будет самая чистая реализация.соотношение между flyTo и ценой всегда будет 1: 1

edit2: я смог вытащить это, но это не совсем там

> test<-head(price,10)[c(1,2,3)]
> test2<-list(test$flyFrom,list(test$flyTo,test$price))
> jsonlite::toJSON(test2, pretty = TRUE,auto_unbox = TRUE)
[
["BUF", "CAK", "JAN", "PHF", "CAE", "FCA", "PHL", "CHS", "AVL", "AVL"],
[
    ["RIC", "PHF", "MEM", "LGA", "LEX", "JAC", "CHO", "DHN", "RDU", "CHS"],
    [7064, 6686, 6134, 6112, 5667, 5616, 5528, 5462, 5115, 5069]
]
] 

1 Ответ

0 голосов
/ 17 ноября 2018

Как показывает ваша попытка, результат может быть достигнут путем преобразования вашего фрейма данных в определенный список.В частности, использование

split(price[, -1], price$flyFrom)
# $AAE
#   flyTo price
# 1   ALG    48
# 2   ORN    84
# 3   MRS   158
# 4   LYS   186
# 5   ORY   198
# 6   IST   374

# $YYE
#   flyTo price
# 7   YXY    48
# 8   YDQ    78
# 9   YXJ   200

дает

toJSON(split(price[, -1], price$flyFrom), pretty = TRUE)
{
  "AAE": [
    {
      "flyTo": "ALG",
      "price": 48
    },
    {
      "flyTo": "ORN",
      "price": 84
    },
    {
      "flyTo": "MRS",
      "price": 158
    },
    {
      "flyTo": "LYS",
      "price": 186
    },
    {
      "flyTo": "ORY",
      "price": 198
    },
    {
      "flyTo": "IST",
      "price": 374
    }
  ],
  "YYE": [
    {
      "flyTo": "YXY",
      "price": 48
    },
    {
      "flyTo": "YDQ",
      "price": 78
    },
    {
      "flyTo": "YXJ",
      "price": 200
    }
  ]
} 
...