2015-03-19 59 views
0

我認爲R對此會有好處......但我是一個完全的新手。我有一組英國郵政編碼(例如「CB2 8UR」)和一個將每個郵政編碼映射到OS網格座標的單獨表格。雙方開始爲CSV:如何繪製郵政編碼和他們的'質量中心'

file1: 
    "pcd" 
    "CB2 8UR" 
    "TE3 5LJ" 

file2: 
    "pcd","col2","col3","oseast1m","osnrth1m","col6",... 
    ... 
    "CB2 8UR","?","?",9823,2034,"?" 
    ... 

真正的文件1有一千個左右的項目,而真正的文件2有幾十萬(約20列)。這裏file2唯一的一點是將郵政編碼轉換爲UK OS網格座標。目前,我認爲我可以將這些座標視爲在二維平面上。

任務是獲取每個郵編的'質量中心'以及郵政編碼的熱圖表示的地圖。

我沒有使用qplot()+ stat_bin2d()管理來繪製file2的數據(即所有的英國郵政編碼)作爲二進制位:

m <- qplot(xlab="Longitude",ylab="Latitude",main="Postcode heatmap",geom="blank",x=pcd$oseast1m,y=pcd$osnrth1m,data=pcd) + stat_bin2d(bins =200,aes(fill = log1p(..count..))) 

其中PCD是從file2的讀取data.frame。

所以:

  • 如何合併文件1和文件只映射文件1中的代碼,但file2中使用COORDS?

  • 如何計算併爲質心添加一個標記?

  • 如果我想標記一些特殊的郵政編碼,所以他們的「質量」高於正常水平,那麼這很容易嗎?

非常感謝您的幫助。

回答

0

這裏是可能有助於您進步的代碼。首先,根據玩具數據框,我們使用dplyr包來合併基於pcd變量的兩個數據文件。

然後它超出了我的熟悉程度,但我提供了一些代碼來查找數據的質心並繪製它們。

library(dplyr) 
post.codes <- data.frame(id = c(1, 2), pcd = c("CB2 8UR", "TE3 5LJ")) 

coords <- data.frame(pcd = c("CB2 8UR", "TE3 5LJ"), coord1 = c("9823", "5555"), coord2 = c("2034", "1234"), 
        othervar = c("XYZ", "ABC"), stringsAsFactors = FALSE) 

merged <- left_join(post.codes, coords, by = "pcd") 

接下來,使用內置stats包中的kmeans來查找和添加質心。這個代碼超出了僞代碼,我希望,但只是方向性的。

merged$centroid <- cbind(kmeans(merged$[the variable to cluster, 2)$cluster) 

centroids <- df %>% group_by(centroid) %>% summarise(average = mean(centroid)) 
library(ggplot2) 
ggplot(centroids, aes([coord1, coord2, color=factor(notsurewhatgoes here))) + 
    geom_point(size=3)+ geom_point(data=centroids, size=5) 

第三,如果你想標記或突出某些代碼(重心?),一般的方法是創建一個新的因素變量,其中要強調的代碼是真,其他都是假的。然後在ggplot中,你根據這個因素做一些事情,比如fill = highlight factor。所有的TRUES將會有一個填充顏色,其餘的將有其他的默認顏色。您可以使用scale_fill_manual(values = c("yourdesiredcolor", "yourseconddesiredcolor")來選取默認的顏色

相關問題