【发布时间】:2020-05-19 14:40:27
【问题描述】:
我有一些看起来像这样的数据:
long_bnk lat_bnk
[1,] "3<U+00B0> 52' 30.1\" W" "40<U+00B0> 44' 3.7\" N"
[2,] "2<U+00B0> 44' 54.4\" E" "42<U+00B0> 7' 18.1\" N"
[3,] NA NA
[4,] "2<U+00B0> 7' 54.2\" E" "41<U+00B0> 31' 21.9\" N"
[5,] "0<U+00B0> 1' 54.5\" W" "39<U+00B0> 58' 59.3\" N"
[6,] "3<U+00B0> 41' 15.5\" W" "40<U+00B0> 27' 47.2\" N"
我正在尝试将数据转换为正确的纬度/经度格式。我正在运行以下命令:
pts_bnk[pts_bnk==""] <- NA
pts_bnk <- pts_bnk[complete.cases(pts_bnk),]
pts_bnk <- matrix(as.numeric(sp::char2dms(as.vector(pts_bnk), "°")), ncol=2)
但是,我不断得到:
if (any(abs(object@deg) > 90)) return("abs(degree) > 90") 中的错误:
需要 TRUE/FALSE 的缺失值另外:警告消息:在 asMethod(object) : 强制引入的 NAs
在转换为正确的纬度/经度格式时我哪里出错了? 数据:
pts_bnk <- structure(c("3<U+00B0> 52' 30.1\" W", "2<U+00B0> 44' 54.4\" E",
NA, "2<U+00B0> 7' 54.2\" E", "0<U+00B0> 1' 54.5\" W", "3<U+00B0> 41' 15.5\" W",
"40<U+00B0> 44' 3.7\" N", "42<U+00B0> 7' 18.1\" N", NA, "41<U+00B0> 31' 21.9\" N",
"39<U+00B0> 58' 59.3\" N", "40<U+00B0> 27' 47.2\" N"), .Dim = c(6L,
2L), .Dimnames = list(NULL, c("long_bnk", "lat_bnk")))
编辑:
基本上我想使用以下方法绘制数据:
library(ggrepel)
library(ggmap)
register_google(key = "MyKey")
spain <- get_map("Spain", zoom = 6)
ggmap(spain, extent = "normal") +
geom_point()
编辑 2:
我拥有的原始数据(有效)如下:
dms_lat <- readLines(n=5)
1 40° 25' 35.8" N
2 40° 26' 28.4" N
3 40° 28' 39.8" N
4
5 38° 59' 15.0" N
dms_long <-readLines(n=5)
1 3° 41' 19.9" W
2 3° 47' 42.2" W
3 3° 41' 11.7" W
4
5 3° 55' 29.6" W
pts <- cbind(dms_long, dms_lat)
pts <- sub("^\\d+\\s+", "", pts)
pts[pts==""] <- NA
pts <- pts[complete.cases(pts),]
pts <- matrix(as.numeric(sp::char2dms(as.vector(pts), "°")), ncol=2)
library(rworldmap)
plot(subset(getMap(resolution = "low"), NAME=="Spain"))
points(pts[,1], pts[,2], col = "red", pch=3, cex = 0.6)
我拥有的当前数据(不起作用)是:
x <- structure(c("3<U+00B0> 52' 30.1\" W", "2<U+00B0> 44' 54.4\" E",
NA, "2<U+00B0> 7' 54.2\" E", "0<U+00B0> 1' 54.5\" W", "3<U+00B0> 41' 15.5\" W",
"40<U+00B0> 44' 3.7\" N", "42<U+00B0> 7' 18.1\" N", NA, "41<U+00B0> 31' 21.9\" N",
"39<U+00B0> 58' 59.3\" N", "40<U+00B0> 27' 47.2\" N"), .Dim = c(6L,
2L), .Dimnames = list(NULL, c("long_bnk", "lat_bnk")))
x %>%
data.frame() %>%
mutate(
lat = sub("<U\\+00B0>", "\u00B0", lat_bnk),
long = sub("<U\\+00B0>", "\u00B0", long_bnk)
) %>%
select(lat, long) %>%
drop_na()
我正在尝试使第二个数据等于第一个数据,以便可以使用ggmap() 绘制它。
【问题讨论】:
-
您可能需要更换
<U+00B0> -
我正在尝试
sub("\\<[^\\]]*\\>", "", pts_long),但运气不佳。 -
抱歉,我没有测试您的代码的密钥。可能是其他人会测试它
-
谢谢,无论如何!
-
gsub("<U\\+00B0>", "\u00B0", as.vector(pts_bnk))
标签: r