通过as.numeric

时间:2016-08-01 06:00:06

标签: r char spatial numeric

我在文本中有大量的空间数据集。我需要将degrees.decimal值转换为十进制度。我的代码如下。除了0到-1之外,它的值很好。 0到-1之间的值通过as.numeric()转换为正值 坐标转换方法很好,但问题是如何在iflese语句中传递零(-0)值。 我是如何克服这个问题的?

data <- c("-7ø12.2","-1ø23.0","-0ø50.3","0ø14.6","2ø59.7")
# latitudes in degree minutes.decimal format
lat1 <- as.numeric(gsub( "ø.*$", "", data)) # substring befor ø
lat2 <- as.numeric(sub(".*ø", "", data)) # substring after ø
lat <-  ifelse(lat1 < 0, lat1 - lat2 / 60, lat1 +  lat2 / 60) 
  

LAT1   [1] -7 -1 0 0 2

1 个答案:

答案 0 :(得分:0)

您正在测试lat1 < 0,但lat1[3]0,因此测试失败,您的ifelse点击了添加结果。您似乎希望-0保持否定,但不是0的工作方式。

添加另一个提取(负号):

neg <- substr(data, 1, 1)
neg
#> [1] "-" "-" "-" "0" "2"

并测试而不是lat1 < 0

ifelse(neg == "-", lat1 - lat2 / 60, lat1 +  lat2 / 60) 
#> [1] -7.2033333 -1.3833333 -0.8383333  0.2433333  2.9950000