2016-05-02 7 views
1

Ich versuche, eine Lookup-Tabelle aus einer tatsächlichen Entfernungsmatrix für US-Postleitzahlen mit dem GoogleMaps-Modell zu erstellen, das auf Lars Relund Nielsens webpage gezeigt wird. Die Postleitzahlen im Nordosten der USA beginnen mit einer "0" und werden daher fallengelassen, wenn reshape2 die Matrix von breit zu lang konvertiert, wie auf seiner Seite beschrieben.Verhindern, dass reshape2 Spaltenüberschriften in Zahlen umwandelt

Beispiel Matrix von Entfernungen (km) zwischen 5 Postleitzahlen:

mdat <- matrix(c(0.000, 113.288, 145.986, 126.271, 368.354 
      ,103.988, 0.000, 69.637, 49.922, 294.386 
      ,144.851, 69.285, 0.000, 25.547, 244.024 
      ,124.531, 48.965, 25.245, 0.000, 258.729 
      ,368.346, 295.159, 243.478, 258.598, 0.000) 
      , nrow = 5 
      , ncol = 5 
      , byrow = TRUE, 
      dimnames = list(c("01014", "01747", "02144", "02453", "04040"), 
          c("01014", "01747", "02144", "02453", "04040"))) 
Looks like this (all well and good); 

#  01014 01747 02144 02453 04040 
#01014 0.000 113.288 145.986 126.271 368.354 
#01747 103.988 0.000 69.637 49.922 294.386 
#02144 144.851 69.285 0.000 25.547 244.024 
#02453 124.531 48.965 25.245 0.000 258.729 
#04040 368.346 295.159 243.478 258.598 0.000 

Aber wenn ich die Matrix zu einer Lookup-Tabelle neu zu gestalten wandelt es die Zeile/Spalte-Namen zu einer Zahl, die die führenden Null aus der Zip-dropping Code.

#reshape into a table of distances 
library(reshape2) 
dat<-(melt(mdat)) 
dat 
colnames(dat)<-c("from","to","km") 
head(dat) 

    from to  km 
1 1014 1014 0.000 
2 1747 1014 103.988 
3 2144 1014 144.851 
4 2453 1014 124.531 
5 4040 1014 368.346 
6 1014 1747 113.288 

Ich hoffe zu bekommen;

from to  km 
1 01014 01014 0.000 
2 01747 01014 103.988 
3 02144 01014 144.851 
4 02453 01014 124.531 
5 04040 01014 368.346 
6 01014 01747 113.288 

Irgendwelche Gedanken darüber, wie ich reshape2 von der Umwandlung der Postleitzahlen in eine Nummer halten kann?

Antwort

2

Fügen Sie as.is = TRUE in Ihrer melt Funktion:

dat<-(melt(mdat, as.is=TRUE)) 
colnames(dat)<-c("from","to","km") 

Dies wird die Spaltennamen als Strings durch den Schmelzprozess halten.

+0

@Imo - Wenn ich Ihren Vorschlag in meinem Beispiel ausgeführt habe, scheint dies nicht zu funktionieren, die "0" ist immer noch in der "dat" -Datei gelöscht..Thinkets? - Vielleicht gibt es einen anderen Weg, ohne Umformung2 - Ich bin für Vorschläge? –

+0

@RobertWhite Sind Sie sicher? Ich habe den gleichen Code (Kopieren und Einfügen Ihrer mdat Matrix-Code und dann meine Daten Schmelzcode) auf zwei verschiedenen Maschinen und erhalten die führenden Nullen auf beiden. – lmo

+0

@Imo - interessant, wenn ich es in Rstudio führe es entfernt die führende "0", aber wenn in R - es funktioniert! ... Ich wusste nicht, und ich hätte wahrscheinlich Rstudio in meiner Frage, da war ein Unterschied? –

Verwandte Themen