2016-03-30 19 views
0

Ich möchte ein Datenframe aus einer Liste von n machen. Jede Liste enthält 3 verschiedene Listen. Ich bin nur interessiert an 1 Liste dieser 3 Liste im Inneren. Die Liste, an der ich interessiert bin, ist ein Datenrahmen mit 12 Obs von 12 Variablen.Machen Sie Datenframe aus einer Liste von Listen in R

Mein Imput tmp in meiner Lernfunktion ist eine Liste von n mit jeweils 5 Beobachtungen. 2 dieser Beobachtungen sind der Breiten- und Längengrad. Dies ist, wie meine lapply Funktion wie folgt aussieht:

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

}) 

Meine Frage ist: wie bekomme ich diese Liste von 12 obs von 12 Variablen in einen Datenrahmen aus einer Liste von n?

Könnte mir jemand helfen ?, Dank

+1

Willkommen bei StackOverflow! Bitte lesen Sie die Informationen über [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und wie man ein [reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/ 5963269/how-to-make-a-great-r-reproduzierbares Beispiel/5963610). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Jaap

+0

möglicherweise mit lapply() und Reduce(). Etwas in der Art von: Reduce (function (...) merge (..., alle = TRUE), lapply (list_of_lists, function (x) x [[df_number]]))) – zacdav

+0

Ich habe etwas mehr Text hinzugefügt enthält meine Lapply-Funktion –

Antwort

0

Ich poste nur meinen Kommentar als Antwort, damit ich Ausgang zeigen Ihnen die Idee zu zeigen:

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

So x ist eine verschachtelte Liste Struktur, in diesem Fall mit konsistenter Benennung/Struktur eine Ebene tiefer.

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

$a$c 
[1] 2 


$d 
$d$b 
[1] 3 

$d$c 
[1] 4 

Jetzt werden wir do.call verwenden, um die data.frame zu bauen. Wir müssen ihm eine Liste von Argumenten übergeben, also verwenden wir list(sapply, um die benannte Liste zu erhalten. Wir gehen die höhere Ebene der Liste nach Position und die innere Ebene nach Namen, da die Namen in den Unterlisten auf der inneren Ebene konsistent sind. Beachten Sie hier, dass die Schlüsselidee im Wesentlichen darin besteht, die intuitive Art der Indexierung umzukehren; Da ich Beobachtungen auf der zweiten Ebene von allen Beobachtungen auf der ersten Ebene ziehen möchte, durchläuft der innere Aufruf von sapply mehrere Werte der ersten Ebene für jeden Wert des Namens auf der zweiten Ebene.

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 

Versuchen Sie, den Befehl zu zerlegen, um zu sehen, was jeder Schritt macht. Wenn Ihre Unterlistenstruktur konsistent ist, sollten Sie in der Lage sein, diesen Ansatz anzupassen, um diese Struktur in der richtigen Reihenfolge zu durchlaufen und die benötigten Daten zu falten.

Auf einem großen Dataset wäre dies nicht effizient, aber für 12x12 sollte es in Ordnung sein.

+0

Danke für Ihren Kommentar! –

Verwandte Themen