我正在尝试将两列数据(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格式)。但我很困惑这个错误从哪里冒出来。
任何帮助将不胜感激!几天来我一直在努力奋斗!
答案 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))
,你应该没事。