如何从嵌套列表创建数据框?

时间:2020-08-02 15:28:25

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

我是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

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

1 个答案:

答案 0 :(得分:0)

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

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}}