【问题标题】:R - Flatten a data frame within a listR - 展平列表中的数据框
【发布时间】:2019-03-08 23:07:00
【问题描述】:

我收到了一个 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

【问题讨论】:

    标签: r list dataframe nested


    【解决方案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
    

    假设id,name(可能还有其他向量/列)具有相同的长度,您可以重用此代码为列的每个元素复制type data.frame 的行并绑定它们。

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 2018-11-09
      • 2016-03-16
      • 2017-08-09
      • 2020-08-08
      • 1970-01-01
      • 2014-12-04
      • 2015-07-26
      • 1970-01-01
      相关资源
      最近更新 更多