【问题标题】:R: How to convert the output-list from a FQL-query into a data.frame?R:如何将输出列表从 FQL 查询转换为 data.frame?
【发布时间】:2014-11-05 15:07:24
【问题描述】:

我想知道如何将 FQL 查询生成的列表转换为结构化数据框。

我使用Rfacebook 来询问 FQL 查询,例如:

getFQL("SELECT name, friends_count, sex, languages FROM user WHERE uid IN 
       (SELECT uid2 FROM friend WHERE uid1=me()), token)

这为我提供了一个列表作为输出,如下所示:

[[1]]
[[1]]$name
[1] "Peter Fuller"

[[1]]$friend_count
[1] 186

[[1]]$sex
[1] "male"

[[1]]$languages
list()


[[2]]
[[2]]$name
[1] "Max Tester"

[[2]]$friend_count
[1] NULL

[[2]]$languages
[[2]]$languages[[1]]
[[2]]$languages[[1]]$id
[1] 1.056736e+14

[[2]]$languages[[1]]$name
[1] "English"


[[2]]$languages[[2]]
[[2]]$languages[[2]]$id
[1] 1.060595e+14

[[2]]$languages[[2]]$name
[1] "Italian"


[[2]]$languages[[3]]
[[2]]$languages[[3]]$id
[1] 1.144157e+14

[[2]]$languages[[3]]$name
[1] "Persian"

我的目标是将列表转换为数据框,使得上面的列表看起来像:

          name friend_count                    languages
1 Peter Fuller          186                          NA  
2   Max Tester           NA   Englisch, Italian, Persian

很遗憾,我对unlist()matrix 的努力失败了。

【问题讨论】:

    标签: r list dataframe facebook-fql


    【解决方案1】:

    首先取消列出每个记录,分别给出LL,然后使用tapplytoString 连接成具有相同名称的公共字符串组件。然后使用 plyr 中的rbind.fill 创建最终的数据框:

    library(plyr) # rbind.fill
    
    LL <- lapply(L, unlist)
    fun <- function(x) as.data.frame(as.list(tapply(x, names(x), toString)))
    do.call(rbind.fill, lapply(LL, fun))
    

    给予:

      friend_count         name  sex                             languages.id
    1          186 Peter Fuller male                                     <NA>
    2         <NA>   Max Tester <NA> 1.056736e+14, 1.060595e+14, 1.144157e+14
                 languages.name
    1                      <NA>
    2 English, Italian, Persian
    

    请注意,我们假设此输入:

    L <- list(list(name = "Peter Fuller", friend_count = 186, sex = "male", 
         languages = list()),
      list(name = "Max Tester", friend_count = NULL, 
          languages = list(list(id =  1.056736e+14, name = "English"),
            list(id = 1.060595e+14, name = "Italian"),
            list(id = 1.144157e+14, name = "Persian"))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-05
      • 2011-07-07
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 2015-05-28
      • 2013-04-23
      • 2014-05-17
      相关资源
      最近更新 更多