2016-05-02 3 views
1

Lars Relund Nielsenのwebpageに表示されているGoogleMapsモデルを使用して、米国の郵便番号の場所の実際の距離行列からルックアップテーブルを作成しようとしています。米国北東部の郵便番号は「0」から始まり、したがって、reshape2がそのページに記載されているようにマトリックスをワイドからロングに変換すると、ドロップされます。reshape2が列見出しを数値に変換しないようにする

5つのジップコードとの間の距離(キロメートル)の例マトリックス:

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 

しかし、私は、ルックアップテーブルにマトリックスを再構築するときには、郵便番号から先行ゼロをドロップ数に行/ COL名を変換コード。

#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 

私は取得したいと考えています。

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 

reshape2が郵便番号を数字に変換しないようにするための考えはありますか?

答えて

2

はあなたのmelt機能でTRUE as.isを=含める:

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

これは、溶融処理によって文字列として列名を維持します。

+0

@Imo - 提供された私の例であなたの提案を実行すると、これはうまくいかないように見えますが、 "dat"データセットに "0"が残っていますか? - 別の方法があり、reshape2を使用しないかもしれない - 私は提案をしていますか? –

+0

@RobertWhiteよろしいですか?私は2つの異なるマシン上で同じコードを実行しています(あなたのmdatマトリックスコードをコピーしてからdatコードを貼り付けるだけです)。そして両方で先行ゼロを取得しました。 – lmo

+0

@Imo - 興味深いのは、Rstudioで実行したときに先行する "0"を取り除くのが面白かったですが、Rで実行するとうまくいきました!...私は気づいていませんでした。違いは? –

関連する問題