如何解决R语言使用SpatialPoints时报非数值矩阵错误的问题
错误原因
报错是因为数据框中第6、7列的Latitude(纬度)和Longitude(经度)被识别为字符型而非数值型,SpatialPoints()要求输入的坐标列必须是数值格式。
解决方案
方法1:直接转换坐标列格式后生成空间点对象
points_sp <- SpatialPoints( data.frame( as.numeric(points$Latitude), as.numeric(points$Longitude) ), CRS("+init=EPSG:4326") )
方法2:先修改原数据框的列类型再调用函数
如果后续也需要使用数值型经纬度,可以先修改原数据结构:
# 将经纬度列转换为数值型 points$Latitude <- as.numeric(points$Latitude) points$Longitude <- as.numeric(points$Longitude) # 再生成空间点对象 points_sp <- SpatialPoints(points[,c(6,7)], CRS("+init=EPSG:4326"))
方法3:读取文件时直接指定列类型
从根源避免读入后出现字符型经纬度,在读Excel时指定各列类型:
points <- read_xlsx( paste0("From/",qwerty,"/aaa.xlsx"), # 按列顺序指定类型,可根据实际字段需求调整 col_types = c("text", "text", "text", "date", "numeric", "numeric", "numeric") )
注意事项
如果转换经纬度时出现NA值,说明原始Excel的经纬度列存在非数值内容(比如空格、特殊符号、缺省占位符等),需要先清洗原始数据再做转换。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

