R:如何将输出列表从FQL查询转换为data.frame? [英] R: How to convert the output-list from a FQL-query into a data.frame?
问题描述
我想知道如何将FQL查询生成的列表转换为结构化的数据帧.
I wonder how to transform a list generated by a FQL-query into a structured data frame.
我使用Rfacebook
来询问FQL查询,例如:
I use Rfacebook
to ask FQL-queries like:
getFQL("SELECT name, friends_count, sex, languages FROM user WHERE uid IN
(SELECT uid2 FROM friend WHERE uid1=me()), token)
这为我提供了一个输出列表,如下所示:
This provides me with a list as output, which looks like:
[[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"
我的目的是将列表转换为数据框,以使上面的列表看起来像这样:
My aim is to convert the list into a data frame, such that the list above looks like:
name friend_count languages
1 Peter Fuller 186 NA
2 Max Tester NA Englisch, Italian, Persian
不幸的是,我对unlist()
和matrix
的尝试失败了.
Unfortunately, my efforts with unlist()
and matrix
failed.
推荐答案
首先取消列出每个记录,分别给出LL
,然后使用tapply
和toString
连接成同名的通用字符串.然后使用plyr中的rbind.fill
创建最终数据帧:
First unlist each record separately giving LL
, then concatenate into a common string components with the same name using tapply
and toString
. Then use rbind.fill
from plyr to create the final data frame:
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
请注意,我们假设此输入:
Note that we assumed this input:
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"))))
这篇关于R:如何将输出列表从FQL查询转换为data.frame?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!