R преобразование списка друзей FB json в фрейм данных - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть файл json, который я пытаюсь преобразовать во фрейм данных.Файл json выглядит следующим образом и имеет такой шаблон.(Файл json от FB, вы можете загрузить весь список друзей / профиль фактически в формате html или json.)

   {
    "friends": [
    {
      "name": "Archie Andrews",
      "timestamp": 1539780292
    },
    {
      "name": "Betty Cooper",
      "timestamp": 1539005874
    },
    {
      "name": "Veronica Lodge",
      "timestamp": 1537680925
    },
    {
       "name": "Sabrina Spellman",
       "timestamp": 1381680968,
       "contact_info": "creepyhouse@666.com"
        }
    ]
 }

В общем, я могу преобразовать это в фрейм данных с 2 столбцами (имя, отметка времени), используя этот код:

  library(rjson)
  friends <- fromJSON(file = "xxx.json")
  data_frame <- data.frame(matrix(unlist(friends), nrow = lengths(friends)+1, byrow = T), stringsAsFactors = FALSE)

Однако раздражает то, что они имеют contact_info, как в примере с Сабриной.То, что происходит, - это то, что это извлекается также, таким образом это искажает договоренность.Отсюда необходимость nrow = lengths (friends) + 1

Archie Andrews      1539780292
Betty Cooper        1539005874
Veronica Lodge      1537680925
Sabrina Spellman    1381680968
creepyhouse@666.com Jughead Jones
1343582935          Midge Klump

. Есть ли способ, при котором при извлечении списков в 2 столбца для каждого списка я просто беру первые 2 элемента (name, timestamp))?В конечном счете, мне нет дела до contact_info, и я просто хочу иметь двухколонный фрейм данных.

1 Ответ

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

Если я правильно понимаю ваш вопрос, вы можете удалить столбцы впоследствии.Обратите внимание, что jsonlite::read_json или jsonlite::fromJSON преобразует файл xxx.json в объект списка, в котором первый элемент этого списка - data.frame.Вы можете извлечь элементы из этого списка, используя оператор подмножества [[.

df <- jsonlite::read_json(path = "test.json", simplifyDataFrame = T)[[1]] ## note the "[[" subseting operator

df <- df[, c("name", "timestamp")] ## select the columns as desired

Результат:

> df
              name  timestamp
1   Archie Andrews 1539780292
2     Betty Cooper 1539005874
3   Veronica Lodge 1537680925
4 Sabrina Spellman 1381680968
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...