Для кадра данных определяется как df
# build a sample data frame with two columns, lat and long
df <- data.frame(Lat = c("1.2N", "1.2S", "35.5N", "33.4S"),
Long = c("113.8W", "113.5W", "43.2E", "55.4E"))
# use gsub with signature gsub(PATTERN, REPLACEMENT, X)
# where you use a regex for the pattern and replacement
# and X is your target.
df$Lat <- gsub("(\\d*\\.\\d*)N","\\1", df$Lat, perl = TRUE)
df$Lat <- gsub("(\\d*\\.\\d*)S","-\\1", df$Lat, perl = TRUE)
df$Long <- gsub("(\\d*\\.\\d*)W","\\1", df$Long, perl = TRUE)
df$Long <- gsub("(\\d*\\.\\d*)E","-\\1", df$Long, perl = TRUE)
Так что теперь единственная работа слева должен выработать регулярное выражение, которое не является чем-то особенным для R, кроме того, что то, что вы будете использовать в качестве \w
где-нибудь еще , в R вам нужно превратиться в \\w
и т. д.
Итак, мы хотим сопоставить цифры, поэтому одна цифра регулярного выражения (в R) \\d
, поэтому мы хотим захватить все их до и после нашего десятичного знака, что означает
\\d*.\\d*
но .
особенный в регулярном выражении, так что давайте избежать его
\\d*\\.\\d*
Теперь давайте думать о N
, и мы хотим, чтобы удалить, что в замене, так что нам нужно сгруппировать цифры так что мы держим их в нашем матче. Мы делаем это с помощью круглых скобок. Так, одна группа и письмо дают нам
(\\d*\\.\\d*)N
мы можем сослаться на захваченную группу в нашей замене с \\1
. Таким образом, наша замена регулярное выражение просто
\\1 which really means \\d*\\.\\d*
и аналогично для S, где мы добавим -
к передней части каждого матча с
-\\1
Привет. Пожалуйста, прочитайте [this] (http://stackoverflow.com/q/5963269/640783), чтобы обеспечить лучший пример вашей проблемы и данных. –