Я предвосхищу это, сказав, что я не использовал char2dms
до сих пор, так что могут быть сложности, которые я пропустил (например, мой вопрос выше о "O"
как направление). Глядя на документы и примеры, вам нужно указать символы, используемые для разграничения градусов, минут и секунд. В вашем случае это "º"
, "'"
и "''"
соответственно. Я пропустил шаг удаления третьего из них, потому что необходимо увидеть, где пишутся секунды. ( Обновление: добавлен шаг для замены регулярного выражения "O$"
(oeste) на "W"
(запад)). Это дает вам то, что ниже:
library(dplyr)
library(ggplot2)
library(sp)
dat <- structure(list(Latitud = c("40º 25' 25.98'' N", "40º 25' 17.63'' N"
), Longitud = c("3º 42' 43.91'' O", "3º 40' 56.22'' O")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -2L)) %>%
mutate_at(vars(Latitud, Longitud), stringr::str_replace_all, "O$", "W")
char2dms(dat$Latitud, chd = "º", chm = "'", chs = "''")
#> [1] 40d25'25.98"N 40d25'17.63"N
Это DMS
S3 объект, а не вектор (на этом мои знания заканчиваются), поэтому вы не можете поместить его непосредственно в столбцы фрейма данных,Вместо этого преобразуйте в числовой вектор, и вы получите числовые координаты во фрейме данных.
dat_numeric <- dat %>%
mutate(lat_edit = as.numeric(char2dms(dat$Latitud, chd = "º", chm = "'", chs = "''")),
lon_edit = as.numeric(char2dms(dat$Longitud, chd = "º", chm = "'", chs = "''")))
dat_numeric
#> # A tibble: 2 x 4
#> Latitud Longitud lat_edit lon_edit
#> <chr> <chr> <dbl> <dbl>
#> 1 40º 25' 25.98'' N 3º 42' 43.91'' W 40.4 -3.71
#> 2 40º 25' 17.63'' N 3º 40' 56.22'' W 40.4 -3.68
Постройте как обычные числа:
ggplot(dat_numeric, aes(x = lon_edit, y = lat_edit)) +
geom_point()
Или преобразовать в sf
объект и график с соответствующим соотношением сторон, проекцией и т. Д.
sf::st_as_sf(dat_numeric, coords = c("lon_edit", "lat_edit")) %>%
ggplot() +
geom_sf()