列R中值的条件更改

列R中值的条件更改,r,dataframe,R,Dataframe,我正在尝试更改纬度和经度列中的值。而不是南部(纬度),我想去掉S,使数字为负数。如果是北方,我只想把N降下来。 我想对经度做同样的事情,并删除字母。我希望西方是消极的,东方是积极的 请让我知道我如何才能做到这一点 对于定义为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"),

我正在尝试更改纬度和经度列中的值。而不是南部(纬度),我想去掉S,使数字为负数。如果是北方,我只想把N降下来。 我想对经度做同样的事情,并删除字母。我希望西方是消极的,东方是积极的


请让我知道我如何才能做到这一点

对于定义为
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)
但是,
在正则表达式中是特殊的,所以让我们暂时避开它

\\d*\\.\\d*
现在让我们考虑一下
N
,我们想在替换中删除它,所以我们需要对数字进行分组,以便将它们保留在匹配中。我们用括号来表示。所以,一组人和这封信给了我们

(\\d*\\.\\d*)N
我们可以在替换中使用
\\1
引用捕获的组。因此,我们的替换正则表达式只是

\\1 which really means \\d*\\.\\d*
同样,对于S,我们在每个匹配的前面添加一个
-

-\\1

你好请阅读,以便为您的问题和数据提供更好的示例。谢谢!我试图使用gsub(),但语法不正确。有什么方法可以准确地列出每个参数在做什么吗?在一个命令中使用相同的方法
df[,c(“Lat”,“Long”)]
-\\1