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

R 为什么我在尝试转换时出错;“数字”;使用dd2dms()将度数转换为DMS?,r,R,我正在尝试使用将两列数据(lat和long坐标)从dd转换为dms dd2dms(y, NS = TRUE) 但是当我得到错误的时候 Error in Math.factor(dd) : sign not meaningful for factors 我知道有很好的答案可以帮助您转换为不同类型的数据,例如。然而不幸的是,这并不能解决我的问题,因为我的数据实际上是数字的 我的数据来自美国人口普查局提供的形状文件。这是我正在使用的代码 require(rgdal) UAP=readOGR(dsn

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

dd2dms(y, NS = TRUE)
但是当我得到错误的时候

Error in Math.factor(dd) : sign not meaningful for factors
我知道有很好的答案可以帮助您转换为不同类型的数据,例如。然而不幸的是,这并不能解决我的问题,因为我的数据实际上是数字的

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

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格式)。但我不知道这个错误是从哪里冒出来的


任何帮助都将不胜感激!我已经为此挣扎了好几天了

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

请注意:

  • 模式(f)
    对于系数
    f
    是数字的(因为系数在内部存储为数字)。您需要
    类(f)

  • 如果
    x
    是一个基本向量,那么
    sapply(x,mode)
    就不必要地复杂了。您只需要
    模式(x)


    • 正如Hong Ooi所暗示的那样,你缺少的是
      y
      可能是一个因素。 例如:

      Rgames> foo<-as.factor(1:5)
      Rgames> mode(foo)
      [1] "numeric"
      Rgames> class(foo)
      [1] "factor"
      
      Rgames>foo模式(foo)
      [1] “数字”
      Rgames>类(foo)
      [1] “因素”
      

      因此,转换,例如,
      yy I怀疑您从中获取
      readOGR
      的未引用包将坐标保留在因子类中,以便“加号”将显示为地理学家所期望的。(如果以数字形式存储,减号将正确显示。)在这种情况下,
      模式
      的信息量小于
      。谢谢@DWin,我刚刚包含了我用于readOGR命令的包。谢谢你的帮助@Carl!