我在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)
变量“位置”包含括号内的实际街道名称,经度和纬度。
为了使用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
数据框的气泡图?
这是一种方法。如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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句