首页 > 解决方案 > 将 Lat/Long 坐标更改为正小数和负小数

问题描述

您好,我有一组数据,其中包含以下格式的纬度和经度坐标:“22.0N”、“2.0E”,我希望能够以数字方式处理该数据。我是 R 新手,所以我想知道是否有人可以帮助我将数据列 (fbdata$Latitude (Deg)) 转换为更有用的东西。即南纬和东经是负数,没有任何字母,这样我就可以从字符类中更改它。这是我想出的代码显然不起作用(这就是我在这里的原因!)

for (i in fbdata$Latitude..Deg.) {
  if (endsWith(fbdata$Latitude..Deg.[i],"S")) {
    print (fbdata$Latitude..Deg.[i]) #paste0 ("-",fbdata$Latitude..Deg.)
  }
}

任何帮助都会很棒!

标签: rdataframe

解决方案


您可以使用 tidyr 的separate()功能来做到这一点。

首先,我们分成两列以将方向与度数分开。我选择使用 remove = FALSE 保留旧列,以防您将其用于其他目的。sep = -1拆分最后一个字符,即方向。一旦你拥有了自己的学位,你应该能够使用as.numeric它来转换它。

fbdata %>%
separate(col = Latitude..Deg., into = c('degree', 'direction'), sep = -1, remove = FALSE) %>%
mutate(degree = as.numeric(degree))

然后对于正/负,对于方向是南或东的情况,我们将度数列乘以 -1 以翻转符号。当方向不是这两个中的任何一个时,我们保持原样。

继上述代码之后:

%>% mutate(degree = case_when(direction %in% c('S', 'E') ~ degree*(-1), TRUE ~ degree))

或者只是使用ifelse(),我个人觉得更容易阅读:

fbdata$degree <- ifelse(fbdata$direction %in% c('S', 'E'), fbdata$degree*(-1), fbdata$degree)

推荐阅读