R - Свести фрейм данных в списке - PullRequest
0 голосов
/ 03 октября 2018

Я получил файл JSON, который можно прочитать в R как список, используя

library(jsonlite)
data <- jsonlite::fromJSON(URL)

. data - это список, который содержит оба столбца данных и data frame.Например,

temp = list(id = c(1, 2, 3), name = c("banana", "organge", "apple"), type = data.frame(colour=c("red", "blue", "green", "purple"), shape = c("round", "round", "square", "square")))

> temp
$id
[1] 1 2 3

$name
[1] "banana"  "organge" "apple"  

$type
  colour  shape
1    red  round
2   blue  round
3  green square
4 purple square

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

   id    name type.colour type.shape
1   1  banana         red      round
2   1  banana        blue      round
3   1  banana       green     square
4   1  banana      purple     square
5   2  orange         red      round
6   2  orange        blue      round
7   2  orange       green     square
8   2  orange      purple     square
9   3   apple         red      round
10  3   apple        blue      round
11  3   apple       green     square
12  3   apple      purple     square

1 Ответ

0 голосов
/ 03 октября 2018

Для этого конкретного случая вы можете использовать следующий код:

DFidxs <- rep(seq_len(nrow(temp$type)),times=length(temp$id))
colidxs <- rep(seq_len(length(temp$id)),each=nrow(temp$type))
DF <- cbind(id = temp$id[colidxs],
            name = temp$name[colidxs],
            temp$type[DFidxs,])

> DF
    id    name colour  shape
1    1  banana    red  round
2    1  banana   blue  round
3    1  banana  green square
4    1  banana purple square
1.1  2 organge    red  round
2.1  2 organge   blue  round
3.1  2 organge  green square
4.1  2 organge purple square
1.2  3   apple    red  round
2.2  3   apple   blue  round
3.2  3   apple  green square
4.2  3   apple purple square

, предполагая, что id, name (и, возможно, другие векторы / столбцы) имеют одинаковую длину, для которой вы можете использовать этот код повторнореплицируйте строки type data.frame для каждого элемента столбцов и связывайте их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...