as.numeric 将字符转换为数字时缺少 R 减号
R minus sign missing when convert character to numeric by as.numeric
我在文本中有大量空间数据集。我需要将度数 minute.decimal 值转换为十进制度数。我的代码如下。它适用于 0 到 -1 以外的值。通过 as.numeric() 将 0 到 -1 中的值转换为正值
坐标转换方法很好,但问题是如何在 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
你正在测试 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
我在文本中有大量空间数据集。我需要将度数 minute.decimal 值转换为十进制度数。我的代码如下。它适用于 0 到 -1 以外的值。通过 as.numeric() 将 0 到 -1 中的值转换为正值 坐标转换方法很好,但问题是如何在 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
你正在测试 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