2015-03-19 24 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")来选取默认的颜色

相关问题