【问题标题】:How to create a dataframe from a nested list?如何从嵌套列表创建数据框?
【发布时间】:2020-08-02 15:28:25
【问题描述】:

我是 R(和 stackoverflow!)的新手,所以如果这是一个不好的问题/不好的描述,请善待。

我正在尝试从嵌套列表中填充数据框。目前,我有一个嵌套列表,其中包含我从网上抓取的 50 份请愿书的信息。我想创建一个数据框,其中包含来自 650 个议会选区中每个选区的签名数量,以便每一列是请愿书,每一行是一个选区。

所以目前我可以调用请愿书(第一个 [[1]])和选区(第二个 [[1]])的签名数量:

> json[[1]][["data"]][["attributes"]][["signatures_by_constituency"]][[1]][["signature_count"]] 

[1] 1144

我还设法根据选区名称制作了一个数据框...

for (i in 1:650){
constituencies[[i]] <- json[[1]][["data"]][["attributes"]][["signatures_by_constituency"]][[i]][["name"]]
}

constituencies <- data.frame(constituencies)

                                 constituencies
1                                     Aldershot
2                           Aldridge-Brownhills
3                      Altrincham and Sale West
4                                  Amber Valley
5                       Arundel and South Downs
6                                      Ashfield
7                                       Ashford
...
650                   Cardiff South and Penarth

现在我需要复制此内容,因此每个请愿书都是一个新列,其中包含每个选区的签名数量。

我试过了:

 for (a in 1:50){
     signatures <- list()
     for (b in 1:650){
         signatures[[b]] <- json[[a]][["data"]][["attributes"]][["signatures_by_constituency"]][[b]][["signature_count"]]
     }
     cbind(constituencies, signatures)
 }

但我刚刚得到:

Error in json[[a]][["data"]][["attributes"]][["signatures_by_constituency"]][[b]] : 
  subscript out of bounds

有人可以帮忙吗?谢谢:)

【问题讨论】:

    标签: r json dataframe for-loop web-scraping


    【解决方案1】:

    我们可以在for循环之外初始化signatures

    signatures <- vector('list', 50)
    for(a in 1:50){
        for(b in 1:650) {
            signatures[[a]][[b]] <-  json[[a]][["data"]][["attributes"]][["signatures_by_constituency"]][[b]][["signature_count"]]
        }
      }
    

    使用一个可重现的小例子

    signatures <- vector('list', 3)
    for(a in 1:3){for(b in 1:2) {signatures[[a]][[b]] <- 1:5}}
    

    【讨论】:

    • @OwenWinter 如果有错误,您可以使用tryCatch 进行包装,并在没有任何元素的情况下返回 NA
    • 谢谢!这真的很有帮助。结果我的一份请愿书只收到了 649 个选区的签名,但我用for(b in 1:length(json[[a]][["data"]][["attributes"]][["signatures_by_constituency"]])) 解决了这个问题,我会手动进入请愿书,但有一个错误。
    猜你喜欢
    • 2022-08-03
    • 2022-09-27
    • 2023-03-23
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多