2017-12-07 4 views
-1

Ich habe einen großen Datenrahmen df, dessen Elemente sind Postleitzahlen und die zugehörigen Shapefiles.Machen Sie einen Vektor aus den Scheiben eines großen Datenrahmens

Es gibt ein Gebietsfeld df $ V2 mit ungefähr 150 Territorien.

Für jedes dieser Gebiete führe ich gTouches aus, um die Adjazenzmatrix für die zugehörigen Postleitzahlen zu erstellen. Was ich letztendlich will, ist eine Liste mit 2 Feldern - dem Gebietsnamen (ein Zeichen) und der Adjazenzmatrix (eine Matrix) - diese Matrix wird eine quadratische Matrix sein, wird aber nicht die gleiche Größe für jedes Element haben. Diese Liste enthält 150 Elemente (1 pro Gebiet).

Mein Code sieht wie folgt aus (und ich entschuldige mich dies auf jeden Fall peinlich ist, aber ich bin ein Anfänger):

Adjacency_Matrices<-list() 
for(i in 1:length(unique(as.character([email protected]$V2)))) 
{Adjacency_Matrices[[i]][1]<-unique(as.character([email protected]$V2))[i] 
Adjacency_Matrices[[i]][2]<- 
gTouches(df[[email protected]$V2==unique(as.character([email protected]$V2))[i],], byid=TRUE)} 

So Linie 1 wird durch die Länge meiner Liste der einzigartigen Gebiete Looping. Zeile 2 definiert das erste Feld der Liste (eine Zeichenfolge). Zeile 3/4 definiert das zweite Feld der Zeichenfolge (gTouches Ausgabe ist eine quadratische Matrix).

ich zwei separate Fehler:

1) Anzahl der Elemente ist nicht ein Vielfaches von Ersatz Länge zu ersetzen

2) Fehler bei Adjacency_Matrices [[1]]: Index außerhalb der Grenzen

Ich habe 1 immer wieder gegoogelt und finde keinen Weg, das zu beheben. Nummer 2 Ich denke, ist etwas, was ich einfach vermisse darüber, wie Listen in R instanziieren.

Jede Hilfe ist willkommen und lassen Sie mich wissen, wenn Sie eine Klarstellung benötigen.

+0

Es ist einfacher, Ihnen zu helfen, wenn Sie ein [reproduzierbares Beispiel] liefern (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) mit Probe Eingabedaten und die gewünschte Ausgabe, so dass wir den Code tatsächlich ausführen und testen können. Listen Sie explizit alle Pakete/Bibliotheken auf, die Sie außerhalb der Basis R verwenden. – MrFlick

Antwort

0

Es stellte sich heraus, dass ich dies überhielt.

Sie können Adjacence_Matrices [[i]] [1] nicht definieren, bevor Sie i selbst definiert haben.

Alles, was ich brauchte, war, anstatt zu versuchen, Adjacency_Matrices [[i]] [1] dann Adjacency_Matrices [[i]] [2] getrennt zu definieren. Ich brauche nur list(), um meine Ausgabeliste zu definieren.

Adjacency_Matrices<-list(
for(i in 1:length(unique(as.character([email protected]$V2)))) 
{Adjacency_Matrices[[i]]<-list(unique(as.character([email protected]$V2))[i], 
gTouches(df[[email protected]$V2==unique(as.character([email protected]$V2))[i],], byid=TRUE))} 
Verwandte Themen