在R中具有嵌套数据帧的无效列表

时间:2016-10-28 00:15:35

标签: json r api

我正在解析foursquare api中的一些数据,我有一部分结果如下所示,一个包含嵌套数据帧的大型列表:

                     List of 1
                      $ :List of 26
                       ..$ :'data.frame':   1 obs. of  6 variables:
                       .. ..$ id        : chr "4bf58dd8d48988d129951735"
                        .. ..$ name      : chr "Train Station"
                         .. ..$ pluralName: chr "Train Stations"
                         .. ..$ shortName : chr "Train Station"
                          .. ..$ icon      :'data.frame':   1 obs. of  2 variables:
                          .. .. ..$ prefix: chr                            "https://ss3.4sqi.net/img/categories_v2/travel/trainstation_"
                  .. .. ..$ suffix: chr ".png"
                  .. ..$ primary   : logi TRUE
                  ..$ :'data.frame':    1 obs. of  6 variables:
                 .. ..$ id        : chr "4bf58dd8d48988d1fe931735"
                   .. ..$ name      : chr "Bus Station"
                  .. ..$ pluralName: chr "Bus Stations"
                 .. ..$ shortName : chr "Bus Station"
                 .. ..$ icon      :'data.frame':    1 obs. of  2 variables:
                  .. .. ..$ prefix: chr      "https://ss3.4sqi.net/img/categories_v2/travel/busstation_"
                  .. .. ..$ suffix: chr ".png"
                  .. ..$ primary   : logi TRUE
                   ..$ :'data.frame':   1 obs. of  6 variables:

我正在尝试为某些元素排除这些数据帧,以便我可以将它们绑定到我已有的预先存在的文件中。最后,我希望最终结果如下所示:

                     $id                             $name
                     4bf58dd8d48988d129951735       train station 
                     4bf58dd8d48988d1fe931735       bus station

谢谢!

1 个答案:

答案 0 :(得分:1)

假设您的大型列表名为mylist。然后,您可以遍历mylist[[1]]并提取相关列:

do.call(rbind, lapply(mylist[[1]], `[`, c("id", "name")))

或使用rbind.pages中的jsonlite函数:

jsonlite::rbind.pages(mylist[[1]])[c("id", "name")]

这两个都会给你

#                         id          name
# 1 4bf58dd8d48988d129951735 Train Station
# 2 4bf58dd8d48988d1fe931735   Bus Station