为什么我在尝试使用dd2dms()将“数字”度转换为DMS时出错?

时间:2013-06-07 11:28:26

标签: r

我正在尝试将两列数据(lat和long坐标)从dd转换为dms使用;

dd2dms(y, NS = TRUE)

但是当我收到错误时

Error in Math.factor(dd) : sign not meaningful for factors

我知道有很好的答案可以帮助您转换为不同类型的数据,例如here。不幸的是,这并没有解决我的问题,因为我的数据实际上是数字的。

我的数据来自美国人口普查局的形状文件here。这是我正在使用的代码。

require(rgdal)
UAP=readOGR(dsn = "C:/Directory", layer = "file")

我要转换的列看起来像这样

 INTPTLAT10   INTPTLON10
+40.7185358 -084.0757264
+40.7038198 -084.1723263

首先我尝试一下:

> y = UAP@data$INTPTLAT10
> sapply(y, mode)
[1] "numeric" "numeric" "numeric" "numeric" #etc...
> dd2dms(y)
Error in Math.factor(dd) : sign not meaningful for factors

我尝试了几个其他简单的测试来尝试和诊断我的问题所在。

> x=UAP@data[14]
> sapply(x, mode)
INTPTLAT10 
 "numeric"
> dd2dms(x, NS = TRUE)
Error in Math.data.frame(dd) : 
  non-numeric variable in data frame: INTPTLAT10

>x = +40.5987
>sapply(x)
[1] "numeric"
>dd2dms(x, NS = TRUE)
[1] 40d35'55.32"N

我需要将这些坐标放到DMS中以便我可以应用距离公式(这需要使用trig函数,因此它们必须是DMS格式)。但我很困惑这个错误从哪里冒出来。

任何帮助将不胜感激!几天来我一直在努力奋斗!

2 个答案:

答案 0 :(得分:0)

您的数据可能会在某处隐藏一些非数字条目,例如“NA”等字符串。当R看到它们时,它假定整个列都是字符,然后可能会转换为一个因子。

请注意:

  • mode(f)因子f是数字(因为因子在内部存储为数字)。你想要class(f)

  • 如果x是原始向量,则sapply(x, mode)不必要地复杂。您只需要mode(x)

答案 1 :(得分:0)

你错过的是y可能是一个因素,正如Hong Ooi暗示的那样。   例如:

Rgames> foo<-as.factor(1:5)
Rgames> mode(foo)
[1] "numeric"
Rgames> class(foo)
[1] "factor"

所以转换,例如如yy <- as.numeric(as.character(y)),你应该没事。