2016-03-30 2 views
0

Я хотел бы сделать dataframe из списка n. Каждый список содержит 3 разных списка внутри. Меня интересует только 1 список из этих 3-х списков внутри. Список, в который я заинтересован, - это data.frame с 12 общими из 12 переменных.Сделать фрейм данных из списка списков в R

My imput tmp в моей функции lapply представляет собой список n с каждыми 5 наблюдениями. 2 из этих наблюдений - широта и долгота. Это как моя lapply функция выглядит следующим образом:

DF_Google_Places<- lapply(tmp, function(tmp){ 

Latitude<-tmp$Latitude 

Longitude<-tmp$Longitude 

LatLon<- paste(Latitude,Longitude, sep=",") 

res<-GET(paste("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=",LatLon,"&radius=200&types=food&key=AIzaSyDS6usHdhdoGIj0ILtXJKCjuj7FBmDEzpM", sep="")) 

    jsonAnsw<-content(res,"text") 

    myDataframe<- jsonlite::fromJSON(content(res,"text")) 

}) 

Мой вопрос: как я могу получить этот список из 12 набл 12 переменных в dataframe из списка п?

Может кто-нибудь помочь мне ?, Спасибо

+1

Добро пожаловать в StackOverflow! Пожалуйста, прочитайте информацию о [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и как дать [воспроизводимый пример] (http://stackoverflow.com/questions/ 5963269/как к Make-A-пра-р-воспроизводимая-пример/5963610). Это облегчит вам помощь другим людям. – Jaap

+0

возможно использование lapply() и Reduce(). Что-то вроде строк: Уменьшить (function (...) merge (..., all = TRUE), lapply (list_of_lists, function (x) x [[df_number]]))) – zacdav

+0

Я добавил еще текст, который содержит мою функцию lapply –

ответ

0

Я просто разместить свой комментарий как ответ, так что я могу показать выход, чтобы показать вам идею:

x <- list(a=list(b=1,c=2),d=list(b=3,c=4)) 

Так x вложенный список структура, в этом случае с последовательным наименованием/структурой на один уровень вниз.

> x 
$a 
$a$b 
[1] 1 

$a$c 
[1] 2 


$d 
$d$b 
[1] 3 

$d$c 
[1] 4 

Теперь мы будем использовать do.call построить data.frame. Нам нужно передать ему именованный список аргументов, поэтому мы будем использовать list(sapply, чтобы получить именованный список. Мы будем продвигать более высокий уровень списка по положению, а внутренний уровень - по имени, поскольку имена согласованы между под-списками на внутреннем уровне. Обратите внимание, что ключевая идея заключается в том, чтобы повернуть вспять то, что было бы интуитивным способом индексирования; так как я хочу вывести наблюдения на втором уровне из всех наблюдений на первом уровне, внутренний вызов sapply пересекает несколько значений уровня один для каждого значения имени на втором уровне.

y <- do.call(data.frame, 
      list(sapply(names(x[[1]]), 
         function(t) sapply(1:length(x), 
              function(j) x[[j]][[t]])))) 

> y 
    b c 
1 1 2 
2 3 4 

Попробуйте разбить эту команду, чтобы увидеть, что делает каждый шаг. Если в структуре вашего списка есть какая-либо согласованность, вы должны иметь возможность адаптировать этот подход для перехода к этой структуре в правильном порядке и свертки данных, которые вам нужны.

На большом наборе данных это было бы неэффективно, но для 12x12 все должно быть хорошо.

+0

Спасибо за ваш комментарий! –