使用R的ggmap根据城市和州列生成经纬度时匹配错误
解决地理编码匹配错误的方案
问题原因
你写的代码没把city和state拼成完整地址字符串,导致geocode函数优先匹配了名气更大的科罗拉多州丹佛市,而不是德克萨斯州的Denver City。
具体解决方法
拼接完整地址再编码
把城市和州合并成城市, 州的格式,明确告诉函数要找的具体地点:# 生成完整地址列 sample_data$full_address <- paste(sample_data$city, sample_data$state, sep = ", ") # 对唯一完整地址做地理编码 lonlat <- geocode(unique(sample_data$full_address), method = "census") # 把结果合并回原数据 locations <- merge(sample_data, lonlat, by.x = "full_address", by.y = "address")修正参数传递方式
原代码里unique的用法错了,它只能接受一个向量。可以先按城市和州去重,再把这两个列一起传给geocode:# 按city和state去重 unique_cities <- unique(sample_data[, c("city", "state")]) # 传递完整的地址组件 lonlat <- geocode(location = unique_cities, method = "census", output = "latlon") # 合并回原数据集 locations <- merge(sample_data, lonlat, by = c("city", "state"))检查结果是否正确
处理完可以手动核对Denver City, TX的坐标:tx_denver <- locations[locations$city == "Denver City" & locations$state == "TX", ] print(tx_denver[, c("city", "state", "lon", "lat")])正确的坐标应该是经度约-102.633,纬度约32.324。
内容的提问来源于stack exchange,提问作者RpySSMTM
相关产品推荐
相关产品推荐

