Я пытаюсь извлечь наборы координат из строк и изменить формат.
Я пробовал некоторые из пакетов stringr и ничего не добился с извлечением паттернов. Я впервые имею дело с регулярным выражением и все еще немного запутываю создание шаблона.
Есть фрейм данных с одним столбцом с одним или несколькими наборами координат. Единственный шаблон (большинство), отделяющий Lat от Long - (-), а для разделения одного набора координат на другой используется (/)
Вот пример некоторых данных:
ID Coordinates
1 3438-5150
2 3346-5108/3352-5120 East island, South port
3 West coast (284312 472254)
4 28.39.97-47.05.62/29.09.13-47.44.03
5 2843-4722/3359-5122(1H-2H-3H-4F)
Большая часть данных представлена в десятичной степени, например (id 1 - это широта 34,38, долгота 51,50), некоторые другие находятся в 00º00'00 '', например (id 4 - 28º 39 '97' широты 47º 05 '62' 'долготы)
Мне нужно будет сделать в несколько шагов
1 - Извлечь все наборы координат, создав новую строку для каждого набора каждой записи;
2 - Извлечь текстовую метку записи в новый столбец, объединив их;
3- Преобразуйте координаты из 00º00'00 '' (28.39.97) в 00.0000º (28.6769 - десятичное число), чтобы все координаты были в одном формате. Я легко могу преобразовать, если они числовые.
4 - Добавьте точку (.), Чтобы отделить десятичные значения градуса (от 3438 до 34,38), и добавьте (-), чтобы идентифицировать как (-34,38) юго-западное полушарие. Все значения должны иметь знак (-).
Я пытаюсь получить что-то вроде этого:
Шаг 1 и 2 - Извлечение наборов координат и имен
ID x y label
1 3438 5150
2 3346 5108 East island, South port
2 3352 5120 East island, South port
3 284312 472254 West coast
4 28.39.97 47.05.62
4 29.09.13 47.44.03
5 2843 4722 1H-2H-3H-4F
5 3359 5122 1H-2H-3H-4F
Шаг 3 - преобразовать формат координат в десятичный градус (ID 4)
ID x y label
1 3438 5150
2 3346 5108 East island, South port
2 3352 5120 East island, South port
3 284312 472254 West coast
4 286769 471005
4 291536 470675
5 2843 4722 1H-2H-3H-4F
5 3359 5122 1H-2H-3H-4F
Шаг 4 - изменить формат отображения
ID x y label
1 -34.38 -51.50
2 -33.46 -51.08 East island, South port
2 -33.52 -51.20 East island, South port
3 -28.43 -47.22 West coast
4 -28.6769 -47.1005
4 -29.1536 -47.0675
5 -28.43 -47.22 1H-2H-3H-4F
5 -33.59 -51.22 1H-2H-3H-4F
Я отредактировал вопрос, чтобы лучше прояснить свои проблемы и изменить некоторые из моих потребностей. Я понял, что это нелегко понимать.
Итак, кто-нибудь работал с чем-то подобным? Любое другое предложение было бы большим подспорьем.
Еще раз спасибо за то, что нашли время, чтобы помочь.
(\d{2})\.?(\d{2})(?:\.(\d{2}))?-(\d{2})\.?(\d{2})(?:\.(\d{2}))?
. Вам нужно искать его глобально (модификаторg
). Затем, если$3
и$6
не пустые, у вас есть минуты и секунды, поэтому преобразуйте их в десятичные дроби степени (в вашем R-коде). К сожалению, я не очень помог, когда дело доходит до R, поэтому, возможно, кто-то другой подберет регулярное выражение и подготовит пример R. - person Dmitry Egorov   schedule 18.08.20162843-4722/3359-5122(1H-2H-3H-4F)
. Рекомендуется включить все варианты использования, которые вам нужно решить, и ожидаемый результат для всех вариантов использования. Это облегчит решение всех ситуаций. - person steveb   schedule 18.08.20162843-4722/3359-5122(1H-2H-3H-4F)
по-прежнему присутствовать в вашем наборе данных? - person steveb   schedule 18.08.2016