使用反向地址解析功能时如何处理缺失值? [英] How to handle missing values when using a reverse geocode function?
问题描述
我目前正在R中使用数据(N为271,848)如下所示:
I am currently working with data (N of 271,848) in R that looks as follows:
Observation Longitude Latitude
--------------------------------------
1 116.38800 39.928902
2 53.000000 32.000000
3 NA NA
4 NA NA
And I am using a reverse geocode function from the following post: Convert latitude and longitude coordinates to country name in R
运行coords2country(points)
行时,出现以下错误:
When I run the coords2country(points)
line, I get the following error:
.checkNumericCoerce2double(obj)中的错误:非有限坐标"
"Error in .checkNumericCoerce2double(obj) : non-finite coordinates"
我的最佳猜测是该函数不知道如何处理缺失值.当我对观察值的一个子集(不适用NA/缺失值)运行代码时,它可以工作.
My best guess is that the function does not know how to treat missing values. When I run the code on a subset of observations (excluding NA's/missing values), it works.
我试图稍作修改功能(请参见下面的最后一行)以解决此问题,但是仍然产生我在上面提到的错误.
I attempted to modify the function slightly (see last line below) to fix this problem, but that still produced the error I am referring to above.
可复制的示例:
Data <- data.frame(
Observation = 1:5,
Longitude = c(116.3880005, 53, -97, NA, NA),
Latitude = c(39.92890167, 32, 32, NA, NA))
library(sp)
library(rworldmap)
coords2country = function(points)
{
countriesSP <- getMap(resolution='low')
#countriesSP <- getMap(resolution='high') #you could use high res map from rworldxtra if you were concerned about detail
# convert our list of points to a SpatialPoints object
#pointsSP = SpatialPoints(points, proj4string=CRS("+proj=longlat +datum=wgs84"))
#! andy modified to make the CRS the same as rworldmap
#pointsSP = SpatialPoints(points, proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
# new changes in worldmap means you have to use this new CRS (bogdan):
pointsSP = SpatialPoints(points, proj4string=CRS(" +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0"))
# use 'over' to get indices of the Polygons object containing each point
indices = over(pointsSP, countriesSP)
# return the ADMIN names of each country
indices$ADMIN
#indices$ISO3 # returns the ISO3 code
#The line below is what I thought could resolve the problem.
na.action = na.omit
}
推荐答案
最好改用它:
coords2country_NAsafe <- function(points)
{
bad <- with(points, is.na(lon) | is.na(lat))
result <- character(length(bad))
result[!bad] <- coords2country(points[!bad,])
result
}
这篇关于使用反向地址解析功能时如何处理缺失值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!