2014-11-05 6 views
0

FQL 쿼리에 의해 생성 된 목록을 구조화 된 데이터 프레임으로 변환하는 방법을 궁금합니다.R : 출력 목록을 FQL 쿼리에서 data.frame으로 변환하는 방법?

[[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" 

내 목표는에 목록을 변환하는 것입니다 :

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

이의 모습을 출력으로 목록으로 날 제공 : 내가 좋아하는 FQL-쿼리를 물어 Rfacebook를 사용

위의 목록처럼 보이는 데이터 프레임 :

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

불행히도, unlist()matrix이 실패했습니다.

답변

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

기부 :

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")))) 
: 우리는이 입력을 상정

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 

참고