R 将坐标从非常规格式的度数转换为十进制度数

R 将坐标从非常规格式的度数转换为十进制度数,r,dataframe,dplyr,stringr,geo,R,Dataframe,Dplyr,Stringr,Geo,我正在尝试转换我的数据,以便可以在地图上绘图。例如,数据如下所示: # A tibble: 2 x 2 Latitud Longitud <chr> <chr> 1 10º 35' 28.98'' N 3º 41' 33.91'' O 2 10º 35' 12.63'' N 3º 45' 46.22'' O 其中返回和错误: Error in if (any(abs(object@

我正在尝试转换我的数据,以便可以在地图上绘图。例如,数据如下所示:

# A tibble: 2 x 2
  Latitud           Longitud        
  <chr>             <chr>           
1 10º 35' 28.98'' N 3º 41' 33.91'' O
2 10º 35' 12.63'' N 3º 45' 46.22'' O
其中返回和错误:

Error in if (any(abs(object@deg) > 90)) return("abs(degree) > 90") : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In asMethod(object) : NAs introduced by coercion
我想在ggplot(或另一个空间包)的地图上绘制这两点

数据:


您可以使用以下自定义函数(我假设
N
S
W
E
。不确定
O
在经度中的含义):


angle2dec您可以使用以下自定义函数(我假设
N
S
W
E
。不确定
O
在经度中的含义):


angle2dec我会在前面说,直到现在我还没有使用过
char2dms
,所以我可能遗漏了一些复杂的东西(比如我上面关于
“O”
的问题)。查看文档和示例,您需要给出用于标定度、分和秒的字符。在您的例子中,它们分别是
“º”
“'
”和
“'
”。我跳过了删除其中第三个的步骤,因为有必要查看秒的写入位置。(更新:添加了一个步骤,将regex
“O$”
(oeste)替换为
“W”
(west))。这将为您提供以下内容:

库(dplyr)
图书馆(GG2)
图书馆(sp)
dat%
在(变量(Latitud,Longitud),stringr::str_替换所有“O$”和“W”)
char2dms(dat$Latitud,chd=“º”,chm=“”,chs=“”)
#>[1]40d25'25.98英寸北纬40d25'17.63英寸北纬
这是一个
DMS
S3对象,不是一个向量(我的知识到此为止),因此不能直接将其放入数据帧列中。相反,将其转换为数字向量,您的数据框中就有了数字坐标

dat\u数值%
变异(lat_edit=as.numeric(char2dms(dat$Latitud,chd=“º”,chm=“”,chs=“”),
lon_edit=as.numeric(char2dms(dat$Longitud,chd=“º”,chm=“”,chs=“”))
dat_数字
#>#A tibble:2 x 4
#>横向纵向横向编辑纵向编辑
#>                                   
#>1 40º25'25.98''北纬3º42'43.91''宽40.4-3.71
#>2 40º25'17.63''北纬3º40'56.22''宽40.4-3.68
像普通数字一样绘图:

ggplot(数据数字,aes(x=lon\u编辑,y=lat\u编辑))+
几何点()

或者转换为
sf
对象,并使用适当的纵横比、投影等进行绘图

sf::st_as_sf(dat_numeric,coords=c(“lon_edit”,“lat_edit”))%>%
ggplot()+
geom_sf()

我会在开场白中说,直到现在我还没有使用过
char2dms
,所以我可能遗漏了一些复杂的地方(比如我上面关于
“O”
的问题作为指导)。查看文档和示例,您需要给出用于标定度、分和秒的字符。在您的例子中,它们分别是
“º”
“'
”和
“'
”。我跳过了删除其中第三个的步骤,因为有必要查看秒的写入位置。(更新:添加了一个步骤,将regex
“O$”
(oeste)替换为
“W”
(west))。这将为您提供以下内容:

库(dplyr)
图书馆(GG2)
图书馆(sp)
dat%
在(变量(Latitud,Longitud),stringr::str_替换所有“O$”和“W”)
char2dms(dat$Latitud,chd=“º”,chm=“”,chs=“”)
#>[1]40d25'25.98英寸北纬40d25'17.63英寸北纬
这是一个
DMS
S3对象,不是一个向量(我的知识到此为止),因此不能直接将其放入数据帧列中。相反,将其转换为数字向量,您的数据框中就有了数字坐标

dat\u数值%
变异(lat_edit=as.numeric(char2dms(dat$Latitud,chd=“º”,chm=“”,chs=“”),
lon_edit=as.numeric(char2dms(dat$Longitud,chd=“º”,chm=“”,chs=“”))
dat_数字
#>#A tibble:2 x 4
#>横向纵向横向编辑纵向编辑
#>                                   
#>1 40º25'25.98''北纬3º42'43.91''宽40.4-3.71
#>2 40º25'17.63''北纬3º40'56.22''宽40.4-3.68
像普通数字一样绘图:

ggplot(数据数字,aes(x=lon\u编辑,y=lat\u编辑))+
几何点()

或者转换为
sf
对象,并使用适当的纵横比、投影等进行绘图

sf::st_as_sf(dat_numeric,coords=c(“lon_edit”,“lat_edit”))%>%
ggplot()+
geom_sf()

谢谢!它也适用于我的完整数据集。我将绘制它们并仔细检查位置,再次感谢!谢谢我今天会仔细看看答案,并接受其中一个<代码>N
-Norte、
S
-Sur、
W
-Oeste和
E
-Este西班牙语。不过我会把它们改成英文的。谢谢!它也适用于我的完整数据集。我将绘制它们并仔细检查位置,再次感谢!谢谢我今天会仔细看看答案,并接受其中一个<代码>N
-Norte、
S
-Sur、
W
-Oeste和
E
-Este西班牙语。但是我会把它们改成英语。为什么你的经度以“O”结尾?这是英语以外的一种语言的缩写,还是我不熟悉的标记?对不起!它的欧斯特(西班牙语)是西部。好吧,这实际上是我的猜测。我将编辑我的答案,将字符串中的“O”替换为“W”。为什么经度以“O”结尾?这是英语以外的一种语言的缩写,还是我不熟悉的标记?对不起!它的欧斯特(西班牙语)是西部。好吧,这实际上是我的猜测。我将编辑我的答案,将字符串中的“O”替换为“W”
Error in if (any(abs(object@deg) > 90)) return("abs(degree) > 90") : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In asMethod(object) : NAs introduced by coercion
structure(list(Latitud = c("40º 25' 25.98'' N", "40º 25' 17.63'' N"
), Longitud = c("3º 42' 43.91'' O", "3º 40' 56.22'' O")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -2L))