2016-05-02 3 views
1

Я пытаюсь создать таблицу поиска из фактической матрицы расстояний для местоположений почтового индекса США, используя модель GoogleMaps, показанную на webpage Lars Relund Nielsen. Почтовые индексы в северо-восточных штатах начинаются с «0» и поэтому теряются, когда reshape2 преобразует матрицу от ширины до длинной, как описано на его странице.Предотвратить преобразование заголовков столбцов в номера

пример матрица расстояний (км) от 5 Zip кодов:

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 к ряду капельного ведущему нуля от Zip код.

#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

Включите as.is = TRUE в вашем melt функции:

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

Это будет держать имена столбцов в виде строк через процесс плавления.

+0

@Imo - Когда я запустил ваше предложение в моем примере, это, похоже, не работает, «0» по-прежнему удаляется в наборе данных «dat». - может быть, есть другой способ, без использования reshape2. - Я готов к предложениям? –

+0

@RobertWhite Вы уверены? Я запускаю тот же код (просто копируя и вставляя код матрицы mdat, а затем мой код плавления dat) на двух разных машинах и получая ведущие нули на обоих. – lmo

+0

@Imo - интересно, когда я запускаю его в Rstudio, он удаляет ведущее «0», но при запуске в R - он работает! ... Я не понимал, и я, вероятно, должен был указать Rstudio в моем вопросе, было разница? –