3

我有一个关于 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. 我想创建一个标签,说明某个位置的人数。我已经尝试使用 ggplo2geom_text选项来实现这一点,但我无法弄清楚如何总结某个位置的所有点并将其写入标签。
  4. 一种更具理论性的方法(也许我稍后会回到这个问题):我想创建一个密度图/聚类图之类的东西,它显示了该区域的人数最多。我已经搜索了一些我可以使用的包。建议使用 SpatialEpi、spatstat 和 DCluster。我的问题:我是否需要从人到某个物体(比如超市)的距离来执行聚类分析?

希望这些不是太多问题。
任何帮助深表感谢。提前致谢!

顺便说一句:准备包含示例数据集的问题是否有更好的帮助?我应该在某处上传文件还是 pastebin 方式可以吗?

4

1 回答 1

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))

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

于 2014-03-01T15:08:57.147 回答