0

我正在尝试使用 dd 将两列数据(经纬度坐标)从 dd 转换为 dms;

dd2dms(y, NS = TRUE)

但是当我确实收到错误时

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

我知道那里有很好的答案可以帮助转换为不同类型的数据,比如这里。然而不幸的是,这并不能解决我的问题,因为我的数据实际上是数字的。

我的数据来自美国人口普查局的 shapefile,可在此处获得。这是我正在使用的代码。

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,以便我可以应用距离公式(这需要使用三角函数,因此它们必须是 DMS 格式)。但我对这个错误从哪里弹出感到困惑。

任何帮助,将不胜感激!这几天我一直在为此苦苦挣扎!

4

2 回答 2

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)) ,你应该没问题。

于 2013-06-07T11:54:52.543 回答
0

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

注意:

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

  • ifx是一个原始向量, thensapply(x, mode)是不必要的复杂。你想要的只是mode(x).

于 2013-06-07T11:42:38.637 回答