R-展平列表中的数据框

时间:2018-10-03 16:32:36

标签: r list dataframe nested

我收到了一个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 :(得分:1)

对于这种特定情况,您可以使用以下代码:

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

假设idname(以及其他向量/列)的长度相同,则可以重复使用此代码来复制type data.frame中每个元素的行列并将其绑定。