В r, есть ли способ разделения этого столбца на столбцы широты и долготы? - PullRequest
0 голосов
/ 21 апреля 2020

enter image description here

Я пытаюсь разделить столбец на два, широту и долготу. Столбец имеет формат PRINT (-71.461299 42.756061)

Ответы [ 3 ]

2 голосов
/ 21 апреля 2020

Мне не ясно, является ли PRINT частью ваших данных. Если это не так, то лучшим вариантом будет функция tidyverse separate:

library(tidyr)
library(magrittr)
data.frame(x = "-71.461299 42.756061") %>% separate(x, c("lat", "lng"), sep=" ")

Если PRINT и скобки являются частью ваших данных, то вы хотите что-то вроде этого:

library(stringr)
library(dplyr)
data.frame(x = "PRINT(-71.461299 42.756061)") %>% 
     mutate(
          lat = str_match(x, "([0-9\\.]+)\\s[0-9\\.]+")[,2], 
          lng = str_match(x, "[0-9\\.]+\\s([0-9\\.]+)")[,2]
     ) %>% select(-x) %>% mutate_if(is.character, as.numeric)

Изучение этого набора пакетов (dplyr, stringr, tidyr) значительно улучшит вашу работу с R со временем.

2 голосов
/ 21 апреля 2020

Предполагая, что у вас есть данные, такие как:

df <- data.frame(Location = c("POINT(-71.461299 42.756061)", 
                "POINT(-71.4619 42.7560)"), stringsAsFactors = FALSE)

Вы можете использовать tidyr::extract как:

tidyr::extract(df, Location, c('lat', 'long'), '\\((.*)\\s(.*)\\)')

#         lat      long
#1 -71.461299 42.756061
#2   -71.4619   42.7560

Это извлекает все между скобками (()) в два столбца, разделенных по космосу.

2 голосов
/ 21 апреля 2020

Вы ищете

strsplit("-71.461299 42.756061", " ")

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...