我在R中有一个像这样的位置数据框......
cambridgeparking <- read.csv("camparking.csv")
ID Location
1 85 BRATTLE ST Cambridge, MA (42.37587649000045, -71.12423110899965)
2 47 BRATTLE ST Cambridge, MA (42.37421138600047, -71.12166838499962)
3 130 HARVARD ST Cambridge, MA (42.3653084390005, -71.09376133099966)
变量“位置”包含实际街道名称&amp;括号内的经度和纬度。
为了使用ggmap可视化基于位置的数据,我使用这些代码来获取剑桥的地图
cambridge <- get_map(location = "cambridge, MA", zoom=10)
cambridgemap <- ggmap(cambridge)
然后,我想创建一个包含这些位置的气泡图
cambridgemap + geom_point(aes(x=Location, y=Location), data=cambridgeparking$Location)
在执行此代码失败后,我意识到R无法通过简单地将x和y值设置为“位置”来识别数据框中的经度和纬度。
我有办法使用ggmap创建带有cambridgeparking
数据框的气泡图吗?
答案 0 :(得分:0)
继续发表评论,例如:
ll <- stringr::str_match_all(cambridgeparking$Location,
"\\(([[:digit:]\\.-]+),[[:space:]]+([[:digit:]\\.-]+)")
cambridgeparking$lat <- as.numeric(ll[[1]][,2])
cambridgeparking$lon <- as.numeric(ll[[1]][,3])
然后在geom_point
中使用那些纬度/经度值。请注意,在“10”缩放级别,这些点将重叠。
答案 1 :(得分:0)
这是一种方法。正如hrbrmstr所提到的,你需要在这里提取lon和lat的数字。就我而言,我使用stringi包来完成这项工作。使用dplyr包中的mutate(),我创建了两个新列(即lon和lat)。然后,我计算了每对lon和lat存在多少数据点。出于这个原因,我修改了您的示例数据。使用计数,您可以在绘制图形时控制气泡的大小。
mydf <- data.frame(id = 1:6,
Location = c("85 BRATTLE ST Cambridge, MA (42.37587649000045, -71.12423110899965)",
"85 BRATTLE ST Cambridge, MA (42.37587649000045, -71.12423110899965)",
"85 BRATTLE ST Cambridge, MA (42.37587649000045, -71.12423110899965)",
"85 BRATTLE ST Cambridge, MA (42.37587649000045, -71.12423110899965)",
"47 BRATTLE ST Cambridge, MA (42.37421138600047, -71.12166838499962)",
"130 HARVARD ST Cambridge, MA (42.3653084390005, -71.09376133099966)"),
stringsAsFactors = FALSE)
library(stringi)
library(dplyr)
library(ggmap)
mutate(mydf, lat = as.numeric(stri_extract_first_regex(str = Location,pattern = "\\d+\\.\\d+")),
lon = as.numeric(stri_extract_last_regex(str = Location,pattern = "-\\d+\\.\\d+"))) %>%
group_by(lon, lat) %>%
summarize(total = n()) -> mydf2
#mydf2
# lon lat total
# (dbl) (dbl) (int)
#1 -71.12423 42.37588 4
#2 -71.12167 42.37421 1
#3 -71.09376 42.36531 1
cambridge <- get_map(location = "cambridge, MA", zoom=10)
ggmap(cambridge) +
geom_point(data = mydf2, aes(x = lon, y = lat, size = total))
如果没有重复的位置,您可以执行以下操作。
mutate(mydf, lat = as.numeric(stri_extract_first_regex(str = Location,pattern = "\\d+\\.\\d+")),
lon = as.numeric(stri_extract_last_regex(str = Location,pattern = "-\\d+\\.\\d+"))) -> mydf2
ggmap(cambridge) +
geom_point(data = mydf2, aes(x = lon, y = lat))