在R中的一个位置处理许多点

时间:2014-03-01 11:37:35

标签: r geospatial spatial-query

我对R中的数据处理有疑问。我有两个数据集。两者都是.csv文件。 我准备了两个示例数据集:

表A - 人员
http://pastebin.com/HbaeqACi

表B - 城市
http://pastebin.com/Fyj66ahq

尽可能少地使用相应的R代码进行加载和可视化。

# Read csv files
# check pastebin links and save content to persons.csv and city.csv.
persons_dataframe = read.csv("persons.csv", header = TRUE)
city_dataframe = read.csv("city.csv", header = TRUE)
# plot them on a map
# load used packages
library(RgoogleMaps)
library(ggplot2)
library(ggmap)
library(sp)

persons_ggplot2 <- persons_dataframe
city_ggplot2 <- city_dataframe
gc <- geocode('new york, usa')
center <- as.numeric(gc)  
G <- ggmap(get_googlemap(center = center, color = 'color', scale = 4, zoom = 10, maptype = "terrain", frame=T), extent="panel")
G1 <- G + geom_point(aes(x=POINT_X, y=POINT_Y ),data=city_dataframe, shape = 22, color="black", fill = "yellow", size = 4) + geom_point(aes(x=POINT_X, y=POINT_Y ),data=persons_dataframe, shape = 8, color="red", size=2.5)
plot(G1)

因此,我有一张地图,可以照亮所有城市和人 我的问题:所有人只在这三个城市分发。

我的问题:

  1. 更一般的问题:这是R的问题吗?
  2. 我想创建一个类似于气泡图的东西,它可以显示一个位置的人数。如:在城市A中有20人,在城市B中有5人。 A市的位置应该比B市更大。
  3. 我想创建一个标签,说明某个位置的人数。我已经尝试用ggplo2 geom_text选项来实现这一点,但我无法弄清楚如何在某个位置总结所有点并将其写入标签。
  4. 一种更理论化的方法(也许我稍后再回过头来看):我想创建像密度图/聚类地图这样的东西,它显示了人数最多的区域。我已经搜索了一些我可以使用的软件包。建议的是SpatialEpi,spatstat和DCluster。我的问题:我是否需要从人到特定物体(比如超市)的距离来进行聚类分析?
  5. 希望这些问题不是太多 任何帮助深表感谢。提前谢谢!

    Btw:准备包含示例数据集的问题有没有更好的帮助?我应该在某个地方上传文件还是以pastebin方式好吗?

1 个答案:

答案 0 :(得分:2)

您可以通过计算每个城市中的数字并将点的大小映射到计数来创建气泡图:

library(plyr)
persons_count <- count(persons_dataframe, vars = c("city", "POINT_X", "POINT_Y"))

G + geom_point(aes(x=POINT_X, y=POINT_Y, size=freq),data=persons_count, color="red")

您可以将计数映射到点的区域,这可能更好地了解相对大小:

G + geom_point(aes(x=POINT_X, y=POINT_Y, size=freq),data=persons_count, color="red") +
    scale_size_area(breaks = unique(persons_count$freq))

您可以添加频率标签,但这对于尺寸比例图例来说有点多余:

G + geom_point(aes(x=POINT_X, y=POINT_Y, size=freq),data=persons_count, color="red") +
    geom_text(aes(x = POINT_X, y=POINT_Y, label = freq), data=persons_count) +
    scale_size_area(breaks = unique(persons_count$freq))

您无法使用示例数据绘制密度,因为您只有三个点。但是如果您有更细粒度的位置信息,您可以使用ggplot2中的stat_density2d函数计算并绘制密度。