Вложенные списки с одной переменной из файла json, преобразовать в строки данных - PullRequest
0 голосов
/ 14 февраля 2019

Я просматривал переполнение стека и в Интернете, пытаясь найти множество решений, которые были предложены для других проблем и дошли до этого этапа, как показано ниже.

Заранее прошу прощения за то, что очень плохо знаком с R и кодирую вgeneral.

Ситуация: я получил некоторые данные из java-источника в виде файла .json.Я хочу преобразовать его во фрейм данных, чтобы мне было удобнее использовать его для анализа изменения значения с течением времени.

Проблема: информация отображается в виде многослойного вложенного списка в файле json.

Появляется в форме:

{"daily":{"1534550400000":14005196,"1550016000000":5924765},"average":{"1534550400000":13750989,"1550016000000":7966277}}

Количество дневных значений равно количеству средних значений.«x» - это код даты, подсчитывающий время в миллисекундах с 1 января 1970 года, а значение после «:» представляет собой целое число.

Когда я использую fromJSON, чтобы вытащить его в R, оно появляется в виде вложенных списков.:

Library(jsonlite)  
x<-fromJSON("short.json")
str(x)
List of 2
$ daily  :List of 2
..$ 1534550400000: int 14005196
..$ 1550016000000: int 5924765
$ average:List of 2
..$ 1534550400000: int 13750989
..$ 1550016000000: int 7966277

Я разделяю ежедневные и средние списки, так как они будут в разных фреймах данных.

daily<-x[[1]]
average<-x[[2]]
> str(daily)
List of 2
 $ 1534550400000: int 14005196
 $ 1550016000000: int 5924765
> str(average)
List of 2
 $ 1534550400000: int 13750989
 $ 1550016000000: int 7966277

Если я продолжу с daily1 <-daily [[1]], тогда япотерять данные о времени, которые мне нужны. </p>

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

MyОсновная проблема с этим заключается в том, что я не уверен, как сгладить списки, вложенные в другой список.

При чтении других проблем со списками многие люди использовали sapply или lapply, что оказалось для них успешным, однако яЯ зашел в тупик.

Заранее спасибо.

Я прочитал документацию для jsonlite, sapply, lapply and flatten, предоставленную краном.

РЕДАКТИРОВАТЬ: У меня естьпродолжил изучать эту проблему и нашел возможный альтернативный метод, в соответствии с которым я использую:

В этой таблице показаны все значения для дневного и среднего и ни одного из временных кодов.

as.data.frame(unlist(flatten(daily)))
1                  14005196
2                   5924765
3                  13750989
4                   7966277

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

EDIT2: желаемым результатом будет таблица на день:

      Time         Var
1 1534550400000 14005196
2 1550016000000 5924765

1 Ответ

0 голосов
/ 14 февраля 2019

Я не уверен, чтобы получить вопрос.Насколько я понимаю, вы хотите:

> as.data.frame(lapply(x, unlist))
                 daily  average
1534550400000 14005196 13750989
1550016000000  5924765  7966277
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...