我认为R会对此有好处......但是我是一个完整的新手。我有一套英国邮政编码(例如'CB2 8UR')和一个单独的表格,用于将每个邮政编码映射到OS网格坐标。两者都以CSV开头:
file1:
"pcd"
"CB2 8UR"
"TE3 5LJ"
file2:
"pcd","col2","col3","oseast1m","osnrth1m","col6",...
...
"CB2 8UR","?","?",9823,2034,"?"
...
真正的file1有大约一千个条目,而真正的file2有几十万个(大约20列)。这里file2的唯一要点是将邮政编码转换为英国操作系统网格坐标。目前,我认为我可以将坐标视为二维飞机。
任务是获得一张地图,每张邮戳的“质心”标记在一起,并附有邮政编码的热图表示。
我确实设法使用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。
所以:
如何合并file1和file以仅映射file1中的代码但使用file2中的coords?
如何计算和添加质心的标记?
如果我想将某些邮政编码标记为'特殊',那么他们的“质量”高于正常情况,这样做会很简单吗?
非常感谢你的帮助。
答案 0 :(得分: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)
第三,如果你想标记或突出某些代码(质心?),一般的方法是创建一个新的因子变量,其中要突出显示的代码为TRUE,其他代码为FALSE。然后在ggplot中,您可以根据该因素执行某些操作,例如fill = highlight factor
。然后,所有TRUES将具有一种填充颜色,其余所有其他颜色将具有其他默认颜色。您可以使用scale_fill_manual(values = c("yourdesiredcolor", "yourseconddesiredcolor")
选择默认颜色以外的颜色